CuPBoP/examples/huffman/main_test_cu-host-x86_64-un...

12231 lines
1.2 MiB
LLVM
Raw Normal View History

2022-05-04 20:59:38 +08:00
; ModuleID = 'main_test_cu-host-x86_64-unknown-linux-gnu.bc'
source_filename = "main_test_cu.cu"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%"class.std::ios_base::Init" = type { i8 }
%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.dim3 = type { i32, i32, i32 }
%struct.CUstream_st = type opaque
%class.INode = type <{ i32 (...)**, i32, [4 x i8] }>
%"class.std::priority_queue" = type <{ %"class.std::vector", %struct.NodeCmp, [7 x i8] }>
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl" }
%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl" = type { %class.INode**, %class.INode**, %class.INode** }
%struct.NodeCmp = type { i8 }
%class.LeafNode = type { %class.INode.base, i8, [3 x i8] }
%class.INode.base = type <{ i32 (...)**, i32 }>
%class.InternalNode = type { %class.INode.base, %class.INode*, %class.INode* }
%"class.__gnu_cxx::__normal_iterator" = type { %class.INode** }
%"class.std::allocator" = type { i8 }
%"class.std::vector.0" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", i64* }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ i64*, i32 }>
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl" = type { %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_key_compare" = type { %"struct.std::less" }
%"struct.std::less" = type { i8 }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
%"struct.std::_Rb_tree_iterator" = type { %"struct.std::_Rb_tree_node_base"* }
%"struct.std::pair" = type { i8, %"class.std::vector.0" }
%"struct.std::_Bit_const_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"class.std::allocator.13" = type { i8 }
%"class.std::allocator.1" = type { i8 }
%"struct.std::_Bit_reference" = type { i64*, i64 }
%"struct.std::_Bit_iterator_base" = type <{ i64*, i32, [4 x i8] }>
%struct.timeval = type { i64, i64 }
%struct.timezone = type { i32, i32 }
%"struct.std::_Rb_tree_const_iterator" = type { %"struct.std::_Rb_tree_node_base"* }
%"struct.std::random_access_iterator_tag" = type { i8 }
%"struct.std::_Rb_tree_node" = type { %"struct.std::_Rb_tree_node_base", %"struct.std::pair" }
%"class.std::allocator.4" = type { i8 }
%"class.__gnu_cxx::new_allocator.5" = type { i8 }
%"class.__gnu_cxx::new_allocator.2" = type { i8 }
%"struct.std::iterator" = type { i8 }
%"class.std::allocator.7" = type { i8 }
%"class.__gnu_cxx::new_allocator.8" = type { i8 }
%"class.__gnu_cxx::new_allocator" = type { i8 }
%"class.__gnu_cxx::__normal_iterator.10" = type { %class.INode** }
%"struct.__gnu_cxx::__ops::_Iter_comp_iter" = type { %struct.NodeCmp }
%"struct.__gnu_cxx::__ops::_Iter_comp_val" = type { %struct.NodeCmp }
%"class.std::__pair_base" = type { i8 }
%"struct.std::_Select1st" = type { i8 }
%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node" = type { %"class.std::_Rb_tree"* }
%"struct.std::pair.11" = type { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
%"class.std::__pair_base.12" = type { i8 }
%"class.__gnu_cxx::new_allocator.14" = type { i8 }
$_Z9gpuAssert9cudaErrorPKcib = comdat any
$_ZN4dim3C2Ejjj = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EEC2Ev = comdat any
$_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpEC2ERKS5_RKS4_ = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EED2Ev = comdat any
$__clang_call_terminate = comdat any
$_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4pushERKS1_ = comdat any
$_ZN8LeafNodeC2Eic = comdat any
$_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4sizeEv = comdat any
$_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3topEv = comdat any
$_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3popEv = comdat any
$_ZN12InternalNodeC2EP5INodeS1_ = comdat any
$_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpED2Ev = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEixERS6_ = comdat any
$_ZNSt6vectorIbSaIbEEaSERKS1_ = comdat any
$_ZNSt6vectorIbSaIbEEC2ERKS1_ = comdat any
$_ZNSt6vectorIbSaIbEE9push_backEb = comdat any
$_ZNSt6vectorIbSaIbEED2Ev = comdat any
$_Z10initParamsPcjRjS0_S0_j = comdat any
$_Z8loadDataPcPjS0_S0_jjRd = comdat any
$_Z15compare_vectorsIjEiPT_S1_j = comdat any
$_ZN5INodeC2Ei = comdat any
$_ZN8LeafNodeD2Ev = comdat any
$_ZN8LeafNodeD0Ev = comdat any
$_ZN5INodeD2Ev = comdat any
$_ZN5INodeD0Ev = comdat any
$_ZN12InternalNodeD2Ev = comdat any
$_ZN12InternalNodeD0Ev = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEC2Ev = comdat any
$_ZNSt6vectorIbSaIbEEC2Ev = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE5beginEv = comdat any
$_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2ERKSt17_Rb_tree_iteratorIS5_E = comdat any
$_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEneERKS6_ = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE3endEv = comdat any
$_ZSt8distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_ = comdat any
$_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv = comdat any
$_ZNKSt6vectorIbSaIbEE5beginEv = comdat any
$_ZNKSt6vectorIbSaIbEE3endEv = comdat any
$_ZNKSt6vectorIbSaIbEEixEm = comdat any
$_ZSt3powfi = comdat any
$_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEED2Ev = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EEC2Ev = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EEC2Ev = comdat any
$_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev = comdat any
$_ZNSt20_Rb_tree_key_compareISt4lessIhEEC2Ev = comdat any
$_ZNSt15_Rb_tree_headerC2Ev = comdat any
$_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev = comdat any
$_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev = comdat any
$_ZNSt15_Rb_tree_header8_M_resetEv = comdat any
$_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev = comdat any
$_ZNSt13_Bvector_baseISaIbEEC2Ev = comdat any
$_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2Ev = comdat any
$_ZNSaImEC2Ev = comdat any
$_ZNSt13_Bit_iteratorC2Ev = comdat any
$_ZN9__gnu_cxx13new_allocatorImEC2Ev = comdat any
$_ZNSt18_Bit_iterator_baseC2EPmj = comdat any
$_ZN9__gnu_cxx13new_allocatorImED2Ev = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE5beginEv = comdat any
$_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE3endEv = comdat any
$_ZSt10__distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag = comdat any
$_ZSt19__iterator_categoryISt19_Bit_const_iteratorENSt15iterator_traitsIT_E17iterator_categoryERKS2_ = comdat any
$_ZStmiRKSt18_Bit_iterator_baseS1_ = comdat any
$_ZNKSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv = comdat any
$_ZSt11__addressofIKSt4pairIKhSt6vectorIbSaIbEEEEPT_RS7_ = comdat any
$_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator = comdat any
$_ZNSt19_Bit_const_iteratorC2EPmj = comdat any
$_ZNKSt19_Bit_const_iteratordeEv = comdat any
$_ZNSt14_Bit_referenceC2EPmm = comdat any
$_ZNKSt14_Bit_referencecvbEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EED2Ev = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_beginEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EED2Ev = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13get_allocatorEv = comdat any
$_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE7destroyEPS6_ = comdat any
$_ZNSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv = comdat any
$_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev = comdat any
$_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv = comdat any
$_ZNSaISt4pairIKhSt6vectorIbSaIbEEEEC2ISt13_Rb_tree_nodeIS4_EEERKSaIT_E = comdat any
$_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEEC2Ev = comdat any
$_ZNSt4pairIKhSt6vectorIbSaIbEEED2Ev = comdat any
$_ZSt11__addressofISt4pairIKhSt6vectorIbSaIbEEEEPT_RS6_ = comdat any
$_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEED2Ev = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE10deallocateERS9_PS8_m = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv = comdat any
$_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE10deallocateEPS8_m = comdat any
$_ZSt4ceilf = comdat any
$_Z12isPowerOfTwoi = comdat any
$_Z9floorPow2i = comdat any
$_ZSt5frexpfPi = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2Ev = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2Ev = comdat any
$_ZNSaIP5INodeEC2Ev = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeEC2Ev = comdat any
$_ZSt8_DestroyIPP5INodeS1_EvT_S3_RSaIT0_E = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EED2Ev = comdat any
$_ZSt8_DestroyIPP5INodeEvT_S3_ = comdat any
$_ZNSt12_Destroy_auxILb1EE9__destroyIPP5INodeEEvT_S5_ = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE13_M_deallocateEPS1_m = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implD2Ev = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE10deallocateERS3_PS2_m = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeE10deallocateEPS2_m = comdat any
$_ZNSaIP5INodeED2Ev = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeED2Ev = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EEC2ERKS3_ = comdat any
$_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_ = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EE5beginEv = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EE3endEv = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE17_S_select_on_copyERKS3_ = comdat any
$_ZNKSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2EmRKS2_ = comdat any
$_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE5beginEv = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE3endEv = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2ERKS2_ = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE17_M_create_storageEm = comdat any
$_ZNSaIP5INodeEC2ERKS1_ = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeEC2ERKS3_ = comdat any
$_ZNSt12_Vector_baseIP5INodeSaIS1_EE11_M_allocateEm = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8allocateERS3_m = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeE8allocateEmPKv = comdat any
$_ZNK9__gnu_cxx13new_allocatorIP5INodeE8max_sizeEv = comdat any
$_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_ = comdat any
$_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_ = comdat any
$_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_ = comdat any
$_ZSt14__copy_move_a2ILb0EN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET1_T0_SC_SB_ = comdat any
$_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEET_SA_ = comdat any
$_ZSt13__copy_move_aILb0EPKP5INodePS1_ET1_T0_S6_S5_ = comdat any
$_ZSt12__niter_baseIPKP5INodeSt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE = comdat any
$_ZSt12__niter_baseIPP5INodeET_S3_ = comdat any
$_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIP5INodeEEPT_PKS5_S8_S6_ = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEE4baseEv = comdat any
$_ZN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS4_ = comdat any
$_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEC2ES2_ = comdat any
$_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_RT0_ = comdat any
$_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_ = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv = comdat any
$_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_T0_SE_T1_T2_ = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv = comdat any
$_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_ = comdat any
$_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEESC_EEbT_T0_ = comdat any
$_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ERKNS0_15_Iter_comp_iterIS2_EE = comdat any
$_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valI7NodeCmpEEEvT_T0_SE_T1_RT2_ = comdat any
$_ZNK7NodeCmpclEPK5INodeS2_ = comdat any
$_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEES7_EEbT_RT0_ = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EE9push_backERKS1_ = comdat any
$_ZSt9push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_ = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE9constructIS2_EEvRS3_PS2_RKT_ = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EE17_M_realloc_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_ = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeE9constructEPS2_RKS2_ = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE12_M_check_lenEmPKc = comdat any
$_ZSt34__uninitialized_move_if_noexcept_aIPP5INodeS2_SaIS1_EET0_T_S5_S4_RT1_ = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE7destroyERS3_PS2_ = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE8max_sizeEv = comdat any
$_ZSt3maxImERKT_S2_S2_ = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8max_sizeERKS3_ = comdat any
$_ZSt22__uninitialized_copy_aIPP5INodeS2_S1_ET0_T_S4_S3_RSaIT1_E = comdat any
$_ZSt18uninitialized_copyIPP5INodeS2_ET0_T_S4_S3_ = comdat any
$_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPP5INodeS4_EET0_T_S6_S5_ = comdat any
$_ZSt4copyIPP5INodeS2_ET0_T_S4_S3_ = comdat any
$_ZSt14__copy_move_a2ILb0EPP5INodeS2_ET1_T0_S4_S3_ = comdat any
$_ZSt12__miter_baseIPP5INodeET_S3_ = comdat any
$_ZSt13__copy_move_aILb0EPP5INodeS2_ET1_T0_S4_S3_ = comdat any
$_ZN9__gnu_cxx13new_allocatorIP5INodeE7destroyEPS2_ = comdat any
$_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ES2_ = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmiEl = comdat any
$_ZNKSt6vectorIP5INodeSaIS1_EE5frontEv = comdat any
$_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEdeEv = comdat any
$_ZSt8pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_ = comdat any
$_ZNSt6vectorIP5INodeSaIS1_EE8pop_backEv = comdat any
$_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmmEv = comdat any
$_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_SD_RT0_ = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE11lower_boundERS6_ = comdat any
$_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEeqERKS6_ = comdat any
$_ZNKSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE8key_compEv = comdat any
$_ZNKSt4lessIhEclERKhS2_ = comdat any
$_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEdeEv = comdat any
$_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE6insertESt17_Rb_tree_iteratorIS7_ERKS7_ = comdat any
$_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERS0_RKS3_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11lower_boundERS1_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS5_EPSt18_Rb_tree_node_baseRS1_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt13_Rb_tree_nodeIS5_E = comdat any
$_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8key_compEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS5_ERKS5_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeC2ERSB_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_ESt23_Rb_tree_const_iteratorIS5_ERKS5_RT_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE10_M_insert_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_EPSt18_Rb_tree_node_baseSH_RKS5_RT_ = comdat any
$_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEE13_M_const_castEv = comdat any
$_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE4sizeEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv = comdat any
$_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE24_M_get_insert_unique_posERS1_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_leftmostEv = comdat any
$_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEmmEv = comdat any
$_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt18_Rb_tree_node_base = comdat any
$_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeclIS5_EEPSt13_Rb_tree_nodeIS5_ERKT_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_create_nodeERKS5_ = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_get_nodeEv = comdat any
$_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_construct_nodeEPSt13_Rb_tree_nodeIS5_ERKS5_ = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE8allocateERS9_m = comdat any
$_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8allocateEmPKv = comdat any
$_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8max_sizeEv = comdat any
$_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE9constructEPS6_RKS6_ = comdat any
$_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERKS4_ = comdat any
$_ZNKSt6vectorIbSaIbEE4sizeEv = comdat any
$_ZNKSt6vectorIbSaIbEE8capacityEv = comdat any
$_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv = comdat any
$_ZNSt6vectorIbSaIbEE13_M_initializeEm = comdat any
$_ZNSt6vectorIbSaIbEE15_M_copy_alignedESt19_Bit_const_iteratorS2_St13_Bit_iterator = comdat any
$_ZNSt6vectorIbSaIbEE5beginEv = comdat any
$_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv = comdat any
$_ZSt11__addressofImEPT_RS0_ = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaImEE10deallocateERS1_Pmm = comdat any
$_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm = comdat any
$_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm = comdat any
$_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm = comdat any
$_ZNSt13_Bit_iteratorC2EPmj = comdat any
$_ZNKSt13_Bit_iteratorplEl = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaImEE8allocateERS1_m = comdat any
$_ZN9__gnu_cxx13new_allocatorImE8allocateEmPKv = comdat any
$_ZNK9__gnu_cxx13new_allocatorImE8max_sizeEv = comdat any
$_ZNSt13_Bit_iteratorpLEl = comdat any
$_ZNSt18_Bit_iterator_base7_M_incrEl = comdat any
$_ZSt4copyIPmS0_ET0_T_S2_S1_ = comdat any
$_ZSt4copyISt19_Bit_const_iteratorSt13_Bit_iteratorET0_T_S3_S2_ = comdat any
$_ZSt14__copy_move_a2ILb0EPmS0_ET1_T0_S2_S1_ = comdat any
$_ZSt12__miter_baseIPmET_S1_ = comdat any
$_ZSt13__copy_move_aILb0EPmS0_ET1_T0_S2_S1_ = comdat any
$_ZSt12__niter_baseIPmET_S1_ = comdat any
$_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mImEEPT_PKS3_S6_S4_ = comdat any
$_ZSt14__copy_move_a2ILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_ = comdat any
$_ZSt12__miter_baseISt19_Bit_const_iteratorET_S1_ = comdat any
$_ZSt13__copy_move_aILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_ = comdat any
$_ZSt12__niter_baseISt19_Bit_const_iteratorET_S1_ = comdat any
$_ZSt12__niter_baseISt13_Bit_iteratorET_S1_ = comdat any
$_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt19_Bit_const_iteratorSt13_Bit_iteratorEET0_T_S6_S5_ = comdat any
$_ZNKSt13_Bit_iteratordeEv = comdat any
$_ZNSt14_Bit_referenceaSEb = comdat any
$_ZNSt19_Bit_const_iteratorppEv = comdat any
$_ZNSt13_Bit_iteratorppEv = comdat any
$_ZNSt18_Bit_iterator_base10_M_bump_upEv = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaImEE17_S_select_on_copyERKS1_ = comdat any
$_ZNKSt13_Bvector_baseISaIbEE20_M_get_Bit_allocatorEv = comdat any
$_ZNSaIbEC2ImEERKSaIT_E = comdat any
$_ZNSt13_Bvector_baseISaIbEEC2ERKS0_ = comdat any
$_ZNSaIbED2Ev = comdat any
$_ZNSt13_Bvector_baseISaIbEED2Ev = comdat any
$_ZN9__gnu_cxx13new_allocatorIbEC2Ev = comdat any
$_ZNSaImEC2IbEERKSaIT_E = comdat any
$_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2ERKSaImE = comdat any
$_ZNSaImED2Ev = comdat any
$_ZNSaImEC2ERKS_ = comdat any
$_ZN9__gnu_cxx13new_allocatorImEC2ERKS1_ = comdat any
$_ZN9__gnu_cxx13new_allocatorIbED2Ev = comdat any
$_ZNSt13_Bvector_baseISaIbEE13_Bvector_implD2Ev = comdat any
$_ZNSt13_Bit_iteratorppEi = comdat any
$_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb = comdat any
$_ZNSt6vectorIbSaIbEE3endEv = comdat any
$_ZSt13copy_backwardISt13_Bit_iteratorS0_ET0_T_S2_S1_ = comdat any
$_ZNKSt6vectorIbSaIbEE12_M_check_lenEmPKc = comdat any
$_ZSt4copyISt13_Bit_iteratorS0_ET0_T_S2_S1_ = comdat any
$_ZSt23__copy_move_backward_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_ = comdat any
$_ZSt12__miter_baseISt13_Bit_iteratorET_S1_ = comdat any
$_ZSt22__copy_move_backward_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_ = comdat any
$_ZNSt20__copy_move_backwardILb0ELb0ESt26random_access_iterator_tagE13__copy_move_bISt13_Bit_iteratorS3_EET0_T_S5_S4_ = comdat any
$_ZNSt13_Bit_iteratormmEv = comdat any
$_ZNSt14_Bit_referenceaSERKS_ = comdat any
$_ZNSt18_Bit_iterator_base12_M_bump_downEv = comdat any
$_ZNKSt6vectorIbSaIbEE8max_sizeEv = comdat any
$_ZN9__gnu_cxx14__alloc_traitsISaImEE8max_sizeERKS1_ = comdat any
$_ZSt14__copy_move_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_ = comdat any
$_ZSt13__copy_move_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_ = comdat any
$_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt13_Bit_iteratorS3_EET0_T_S5_S4_ = comdat any
$_ZTS5INode = comdat any
$_ZTI5INode = comdat any
$_ZTS8LeafNode = comdat any
$_ZTI8LeafNode = comdat any
$_ZTS12InternalNode = comdat any
$_ZTI12InternalNode = comdat any
$_ZTV8LeafNode = comdat any
$_ZTV5INode = comdat any
$_ZTV12InternalNode = comdat any
@.str = private unnamed_addr constant [19 x i8] c"CUDA initialized.\0A\00", align 1
@_ZStL8__ioinit = internal global %"class.std::ios_base::Init" zeroinitializer, align 1
@__dso_handle = external hidden global i8
@.str.1 = private unnamed_addr constant [3 x i8] c"rb\00", align 1
@.str.2 = private unnamed_addr constant [23 x i8] c"Cannot read input file\00", align 1
@stderr = external dso_local global %struct._IO_FILE*, align 8
@.str.3 = private unnamed_addr constant [10 x i8] c"./hist.cu\00", align 1
@_ZTVN10__cxxabiv117__class_type_infoE = external dso_local global i8*
@_ZTS5INode = linkonce_odr dso_local constant [7 x i8] c"5INode\00", comdat, align 1
@_ZTI5INode = linkonce_odr dso_local constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @_ZTS5INode, i32 0, i32 0) }, comdat, align 8
@_ZTVN10__cxxabiv120__si_class_type_infoE = external dso_local global i8*
@_ZTS8LeafNode = linkonce_odr dso_local constant [10 x i8] c"8LeafNode\00", comdat, align 1
@_ZTI8LeafNode = linkonce_odr dso_local constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @_ZTS8LeafNode, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTI5INode to i8*) }, comdat, align 8
@_ZTS12InternalNode = linkonce_odr dso_local constant [15 x i8] c"12InternalNode\00", comdat, align 1
@_ZTI12InternalNode = linkonce_odr dso_local constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @_ZTS12InternalNode, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTI5INode to i8*) }, comdat, align 8
@.str.4 = private unnamed_addr constant [27 x i8] c"CUDA! Starting VLC Tests!\0A\00", align 1
@.str.5 = private unnamed_addr constant [98 x i8] c"Parameters: num_elements: %d, num_blocks: %d, num_block_threads: %d\0A----------------------------\0A\00", align 1
@.str.6 = private unnamed_addr constant [42 x i8] c"Cuda error in file '%s' in line %i : %s.\0A\00", align 1
@.str.7 = private unnamed_addr constant [16 x i8] c"main_test_cu.cu\00", align 1
@.str.8 = private unnamed_addr constant [34 x i8] c"CPU Encoding time (CPU): %f (ms)\0A\00", align 1
@.str.9 = private unnamed_addr constant [23 x i8] c"CPU Encoded to %d [B]\0A\00", align 1
@.str.10 = private unnamed_addr constant [40 x i8] c"Num_blocks to be passed to scan is %d.\0A\00", align 1
@.str.11 = private unnamed_addr constant [46 x i8] c"Cuda error: %s in file '%s' in line %i : %s.\0A\00", align 1
@.str.12 = private unnamed_addr constant [31 x i8] c"Pack2 Kernel execution failed\0A\00", align 1
@.str.13 = private unnamed_addr constant [21 x i8] c"GPUassert: %s %s %d\0A\00", align 1
@_ZTV8LeafNode = linkonce_odr dso_local unnamed_addr constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI8LeafNode to i8*), i8* bitcast (void (%class.LeafNode*)* @_ZN8LeafNodeD2Ev to i8*), i8* bitcast (void (%class.LeafNode*)* @_ZN8LeafNodeD0Ev to i8*)] }, comdat, align 8
@_ZTV5INode = linkonce_odr dso_local unnamed_addr constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI5INode to i8*), i8* bitcast (void (%class.INode*)* @_ZN5INodeD2Ev to i8*), i8* bitcast (void (%class.INode*)* @_ZN5INodeD0Ev to i8*)] }, comdat, align 8
@_ZTV12InternalNode = linkonce_odr dso_local unnamed_addr constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI12InternalNode to i8*), i8* bitcast (void (%class.InternalNode*)* @_ZN12InternalNodeD2Ev to i8*), i8* bitcast (void (%class.InternalNode*)* @_ZN12InternalNodeD0Ev to i8*)] }, comdat, align 8
@.str.14 = private unnamed_addr constant [15 x i8] c"No input file\0A\00", align 1
@.str.15 = private unnamed_addr constant [28 x i8] c"\0A%s, %u bytes, entropy %f\0A\0A\00", align 1
@_ZL18g_numEltsAllocated = internal global i32 0, align 4
@.str.16 = private unnamed_addr constant [24 x i8] c"g_numEltsAllocated == 0\00", align 1
@.str.17 = private unnamed_addr constant [10 x i8] c"./scan.cu\00", align 1
@__PRETTY_FUNCTION__._ZL17preallocBlockSumsj = private unnamed_addr constant [37 x i8] c"void preallocBlockSums(unsigned int)\00", align 1
@_ZL15g_scanBlockSums = internal global i32** null, align 8
@_ZL20g_numLevelsAllocated = internal global i32 0, align 4
@.str.18 = private unnamed_addr constant [18 x i8] c"preallocBlockSums\00", align 1
@.str.19 = private unnamed_addr constant [37 x i8] c"prescanArrayRecursive before kernels\00", align 1
@.str.20 = private unnamed_addr constant [21 x i8] c"prescanWithBlockSums\00", align 1
@.str.21 = private unnamed_addr constant [24 x i8] c"prescanNP2WithBlockSums\00", align 1
@.str.22 = private unnamed_addr constant [11 x i8] c"uniformAdd\00", align 1
@.str.23 = private unnamed_addr constant [8 x i8] c"prescan\00", align 1
@.str.24 = private unnamed_addr constant [11 x i8] c"prescanNP2\00", align 1
@.str.25 = private unnamed_addr constant [17 x i8] c"deallocBlockSums\00", align 1
@.str.26 = private unnamed_addr constant [26 x i8] c"vector::_M_realloc_insert\00", align 1
@.str.27 = private unnamed_addr constant [28 x i8] c"vector<bool>::_M_insert_aux\00", align 1
@.str.28 = private unnamed_addr constant [21 x i8] c"Comparing vectors: \0A\00", align 1
@.str.29 = private unnamed_addr constant [36 x i8] c"Diff: data1[%d]=%d, data1[%d]=%d.\0A\00", align 1
@.str.30 = private unnamed_addr constant [29 x i8] c"PASS! vectors are matching!\0A\00", align 1
@.str.31 = private unnamed_addr constant [33 x i8] c"FAIL! vectors are NOT matching!\0A\00", align 1
@0 = private unnamed_addr constant [22 x i8] c"_Z12histo_kernelPhlPj\00", align 1
@1 = private unnamed_addr constant [50 x i8] c"_ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_\00", align 1
@2 = private unnamed_addr constant [34 x i8] c"_ZL7prescanILb1ELb0EEvPjPKjS0_iii\00", align 1
@3 = private unnamed_addr constant [34 x i8] c"_ZL7prescanILb1ELb1EEvPjPKjS0_iii\00", align 1
@4 = private unnamed_addr constant [23 x i8] c"_ZL10uniformAddPjS_iii\00", align 1
@5 = private unnamed_addr constant [34 x i8] c"_ZL7prescanILb0ELb0EEvPjPKjS0_iii\00", align 1
@6 = private unnamed_addr constant [34 x i8] c"_ZL7prescanILb0ELb1EEvPjPKjS0_iii\00", align 1
@7 = private unnamed_addr constant [19 x i8] c"_ZL5pack2PjS_S_S_j\00", align 1
@8 = private constant [176489 x i8] c"P\EDU\BA\01\00\10\00X\B1\02\00\00\00\00\00\02\00\01\01@\00\00\00h\82\02\00\00\00\00\00\00\00\00\00\00\00\00\00\07\00\01\00=\00\00\00\00\00\00\00\00\00\00\00\11\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\7FELF\02\01\013\07\00\00\00\00\00\00\00\02\00\BE\00e\00\00\00\00\00\00\00\00\00\00\00\C0\81\02\00\00\00\00\00\80x\02\00\00\00\00\00=\05=\00@\008\00\03\00@\00%\00\01\00\00.shstrtab\00.strtab\00.symtab\00.symtab_shndx\00.nv.info\00.text._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.global\00.nv.constant0._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.text._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.nv.constant0._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.text._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.nv.constant0._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.text._ZL7prescanILb1ELb0EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb1ELb0EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb1ELb0EEvPjPKjS0_iii\00.nv.constant0._ZL7prescanILb1ELb0EEvPjPKjS0_iii\00.text._ZL10uniformAddPjS_iii\00.nv.info._ZL10uniformAddPjS_iii\00.nv.shared._ZL10uniformAddPjS_iii\00.nv.constant0._ZL10uniformAddPjS_iii\00.text._ZL5pack2PjS_S_S_j\00.nv.info._ZL5pack2PjS_S_S_j\00.nv.shared._ZL5pack2PjS_S_S_j\00.nv.constant0._ZL5pack2PjS_S_S_j\00.text._ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_\00.nv.info._ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_\00.nv.shared._ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_\00.nv.constant0._ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_\00.text._Z12histo_kernelPhlPj\00.nv.info._Z12histo_kernelPhlPj\00.nv.shared._Z12histo_kernelPhlPj\00.nv.constant0._Z12histo_kernelPhlPj\00\00.shstrtab\00.strtab\00.symtab\00.symtab_shndx\00.nv.info\00_ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.text._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00.nv.global\00threadIdx\00blockIdx\00blockDim\00gridDim\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL12prescanBlockILb0EEvPjiS0_\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL16clearLastElementILb0EEvPjS0_i\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL16scanRootToLeavesPjj\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL21storeSharedChunkToMemILb1EEvPjPKjiiiiiii\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL22loadSharedChunkFromMemILb1EEvPjPKjiiRiS3_S3_S3_S3_S3_\00$_ZL7prescanILb0ELb1EEvPjPKjS0_iii$_ZL8buildSumPj\00$___ZZL7prescanILb0ELb1EEvPjPKjS0_iiiE6s_data__2725\00.nv.constant0._ZL7prescanILb0ELb1EEvPjPKjS0_iii\00_param\00_ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.text._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL12prescanBlockILb0EEvPjiS0_\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL16clearLastElementILb0EEvPjS0_i\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL16scanRootToLeavesPjj\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL21storeSharedChunkToMemILb0EEvPjPKjiiiiiii\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL22loadSharedChunkFromMemILb0EEvPjPKjiiRiS3_S3_S3_S3_S3_\00$_ZL7prescanILb0ELb0EEvPjPKjS0_iii$_ZL8buildSumPj\00$___ZZL7prescanILb0ELb0EEvPjPKjS0_iiiE6s_data__2426\00.nv.constant0._ZL7prescanILb0ELb0EEvPjPKjS0_iii\00_ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.text._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.nv.info._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00.nv.shared._ZL7prescanILb1ELb1EEvPjPKjS0_iii\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL12prescanBlockILb1EEvPjiS0_\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL16clearLastElementILb1EEvPjS0_i\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL16scanRootToLeavesPjj\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL21storeSharedChunkToMemILb1EEvPjPKjiiiiiii\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL22loadSharedChunkFromMemILb1EEvPjPKjiiRiS3_S3_S3_S3_S3_\00$_ZL7prescanILb1ELb1EEvPjPKjS0_iii$_ZL8buildSumPj\00$___ZZL7prescanILb1ELb1EEvPjPKjS0_iiiE6s_data__2059\00.nv
@__cuda_fatbin_wrapper = internal constant { i32, i32, i8*, i8* } { i32 1180844977, i32 1, i8* getelementptr inbounds ([176489 x i8], [176489 x i8]* @8, i64 0, i64 0), i8* null }, section ".nvFatBinSegment", align 8
@__cuda_gpubin_handle = internal global i8** null, align 8
@llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_main_test_cu.cu, i8* null }, { i32, void ()*, i8* } { i32 65535, void ()* bitcast (void (i8*)* @__cuda_module_ctor to void ()*), i8* null }]
; Function Attrs: noinline optnone uwtable
define dso_local zeroext i1 @_Z8InitCUDAv() #0 {
entry:
%call = call i32 @cudaSetDevice(i32 0)
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
ret i1 true
}
declare dso_local i32 @cudaSetDevice(i32) #1
declare dso_local i32 @printf(i8*, ...) #1
; Function Attrs: noinline uwtable
define internal void @__cxx_global_var_init() #2 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) #3
ret void
}
declare dso_local void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"*) unnamed_addr #1
declare dso_local void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init"*) unnamed_addr #1
; Function Attrs: nounwind
declare dso_local i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #3
; Function Attrs: noinline optnone uwtable
define dso_local void @_Z12histo_kernelPhlPj(i8* %buffer, i64 %size, i32* %histo) #0 {
entry:
%buffer.addr = alloca i8*, align 8
%size.addr = alloca i64, align 8
%histo.addr = alloca i32*, align 8
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i8* %buffer, i8** %buffer.addr, align 8
store i64 %size, i64* %size.addr, align 8
store i32* %histo, i32** %histo.addr, align 8
%kernel_args = alloca i8*, i64 3, align 16
%0 = bitcast i8** %buffer.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i64* %size.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %histo.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%7 = load i64, i64* %shmem_size, align 8
%8 = load i8*, i8** %stream, align 8
%9 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%10 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 12, i1 false)
%11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%12 = load i64, i64* %11, align 8
%13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%14 = load i32, i32* %13, align 8
%15 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%16 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %15, i8* align 8 %16, i64 12, i1 false)
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%18 = load i64, i64* %17, align 8
%19 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%20 = load i32, i32* %19, align 8
%21 = bitcast i8* %8 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i8*, i64, i32*)* @_Z12histo_kernelPhlPj to i8*), i64 %12, i32 %14, i64 %18, i32 %20, i8** %kernel_args, i64 %7, %struct.CUstream_st* %21)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
declare dso_local i32 @__cudaPopCallConfiguration(%struct.dim3*, %struct.dim3*, i64*, i8**)
declare dso_local i32 @cudaLaunchKernel(i8*, i64, i32, i64, i32, i8**, i64, %struct.CUstream_st*)
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #4
; Function Attrs: noinline optnone uwtable
define dso_local i32 @_Z8runHistoPcPjjS0_(i8* %file, i32* %freq, i32 %memSize, i32* %source) #0 {
entry:
%file.addr = alloca i8*, align 8
%freq.addr = alloca i32*, align 8
%memSize.addr = alloca i32, align 4
%source.addr = alloca i32*, align 8
%f = alloca %struct._IO_FILE*, align 8
%result = alloca i64, align 8
%buffer = alloca i8*, align 8
%blocks = alloca i32, align 4
%partSize = alloca i32, align 4
%totalNum = alloca i32, align 4
%partialNum = alloca i32, align 4
%dev_buffer0 = alloca i8*, align 8
%dev_buffer1 = alloca i8*, align 8
%dev_histo = alloca i32*, align 8
%i = alloca i32, align 4
%agg.tmp = alloca %struct.dim3, align 4
%agg.tmp29 = alloca %struct.dim3, align 4
%agg.tmp.coerce = alloca { i64, i32 }, align 4
%agg.tmp29.coerce = alloca { i64, i32 }, align 4
%agg.tmp34 = alloca %struct.dim3, align 4
%agg.tmp36 = alloca %struct.dim3, align 4
%agg.tmp34.coerce = alloca { i64, i32 }, align 4
%agg.tmp36.coerce = alloca { i64, i32 }, align 4
store i8* %file, i8** %file.addr, align 8
store i32* %freq, i32** %freq.addr, align 8
store i32 %memSize, i32* %memSize.addr, align 4
store i32* %source, i32** %source.addr, align 8
%0 = load i8*, i8** %file.addr, align 8
%call = call %struct._IO_FILE* @fopen(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store %struct._IO_FILE* %call, %struct._IO_FILE** %f, align 8
%1 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%tobool = icmp ne %struct._IO_FILE* %1, null
br i1 %tobool, label %if.end, label %if.then
if.then: ; preds = %entry
%2 = load i8*, i8** %file.addr, align 8
call void @perror(i8* %2)
call void @exit(i32 1) #16
unreachable
if.end: ; preds = %entry
%3 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call1 = call i32 @fseek(%struct._IO_FILE* %3, i64 0, i32 0)
%4 = load i32*, i32** %source.addr, align 8
%5 = bitcast i32* %4 to i8*
%6 = load i32, i32* %memSize.addr, align 4
%conv = zext i32 %6 to i64
%7 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call2 = call i64 @fread(i8* %5, i64 1, i64 %conv, %struct._IO_FILE* %7)
store i64 %call2, i64* %result, align 8
%8 = load i64, i64* %result, align 8
%9 = load i32, i32* %memSize.addr, align 4
%conv3 = zext i32 %9 to i64
%cmp = icmp ne i64 %8, %conv3
br i1 %cmp, label %if.then4, label %if.end6
if.then4: ; preds = %if.end
%10 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%call5 = call i32 @fputs(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0), %struct._IO_FILE* %10)
br label %if.end6
if.end6: ; preds = %if.then4, %if.end
%11 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call7 = call i32 @fclose(%struct._IO_FILE* %11)
%12 = load i32*, i32** %source.addr, align 8
%13 = bitcast i32* %12 to i8*
store i8* %13, i8** %buffer, align 8
store i32 2, i32* %blocks, align 4
%14 = load i32, i32* %memSize.addr, align 4
%div = udiv i32 %14, 32
store i32 %div, i32* %partSize, align 4
%15 = load i32, i32* %memSize.addr, align 4
%conv8 = zext i32 %15 to i64
%div9 = udiv i64 %conv8, 4
%conv10 = trunc i64 %div9 to i32
store i32 %conv10, i32* %totalNum, align 4
%16 = load i32, i32* %partSize, align 4
%conv11 = sext i32 %16 to i64
%div12 = udiv i64 %conv11, 4
%conv13 = trunc i64 %div12 to i32
store i32 %conv13, i32* %partialNum, align 4
%17 = load i32, i32* %partSize, align 4
%conv14 = sext i32 %17 to i64
%call15 = call i32 @cudaMalloc(i8** %dev_buffer0, i64 %conv14)
%18 = load i32, i32* %partSize, align 4
%conv16 = sext i32 %18 to i64
%call17 = call i32 @cudaMalloc(i8** %dev_buffer1, i64 %conv16)
%19 = bitcast i32** %dev_histo to i8**
%call18 = call i32 @cudaMalloc(i8** %19, i64 1024)
%20 = load i32*, i32** %dev_histo, align 8
%21 = bitcast i32* %20 to i8*
%call19 = call i32 @cudaMemset(i8* %21, i32 0, i64 1024)
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %if.end6
%22 = load i32, i32* %i, align 4
%23 = load i32, i32* %totalNum, align 4
%cmp20 = icmp slt i32 %22, %23
br i1 %cmp20, label %for.body, label %for.end
for.body: ; preds = %for.cond
%24 = load i8*, i8** %dev_buffer0, align 8
%25 = load i8*, i8** %buffer, align 8
%26 = load i32, i32* %i, align 4
%idx.ext = sext i32 %26 to i64
%add.ptr = getelementptr inbounds i8, i8* %25, i64 %idx.ext
%27 = load i32, i32* %partSize, align 4
%conv21 = sext i32 %27 to i64
%call22 = call i32 @cudaMemcpy(i8* %24, i8* %add.ptr, i64 %conv21, i32 1)
call void @_Z9gpuAssert9cudaErrorPKcib(i32 %call22, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0), i32 88, i1 zeroext true)
%28 = load i8*, i8** %dev_buffer1, align 8
%29 = load i8*, i8** %buffer, align 8
%30 = load i32, i32* %i, align 4
%idx.ext23 = sext i32 %30 to i64
%add.ptr24 = getelementptr inbounds i8, i8* %29, i64 %idx.ext23
%31 = load i32, i32* %partialNum, align 4
%idx.ext25 = sext i32 %31 to i64
%add.ptr26 = getelementptr inbounds i8, i8* %add.ptr24, i64 %idx.ext25
%32 = load i32, i32* %partSize, align 4
%conv27 = sext i32 %32 to i64
%call28 = call i32 @cudaMemcpy(i8* %28, i8* %add.ptr26, i64 %conv27, i32 1)
call void @_Z9gpuAssert9cudaErrorPKcib(i32 %call28, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.3, i64 0, i64 0), i32 90, i1 zeroext true)
%33 = load i32, i32* %blocks, align 4
%mul = mul nsw i32 %33, 2
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %mul, i32 1, i32 1)
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp29, i32 256, i32 1, i32 1)
%34 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
%35 = bitcast %struct.dim3* %agg.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %34, i8* align 4 %35, i64 12, i1 false)
%36 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
%37 = load i64, i64* %36, align 4
%38 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
%39 = load i32, i32* %38, align 4
%40 = bitcast { i64, i32 }* %agg.tmp29.coerce to i8*
%41 = bitcast %struct.dim3* %agg.tmp29 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %40, i8* align 4 %41, i64 12, i1 false)
%42 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp29.coerce, i32 0, i32 0
%43 = load i64, i64* %42, align 4
%44 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp29.coerce, i32 0, i32 1
%45 = load i32, i32* %44, align 4
%call30 = call i32 @__cudaPushCallConfiguration(i64 %37, i32 %39, i64 %43, i32 %45, i64 0, i8* null)
%tobool31 = icmp ne i32 %call30, 0
br i1 %tobool31, label %kcall.end, label %kcall.configok
kcall.configok: ; preds = %for.body
%46 = load i8*, i8** %dev_buffer0, align 8
%47 = load i32, i32* %partSize, align 4
%conv32 = sext i32 %47 to i64
%48 = load i32*, i32** %dev_histo, align 8
call void @_Z12histo_kernelPhlPj(i8* %46, i64 %conv32, i32* %48)
br label %kcall.end
kcall.end: ; preds = %kcall.configok, %for.body
%call33 = call i32 @cudaDeviceSynchronize()
%49 = load i32, i32* %blocks, align 4
%mul35 = mul nsw i32 %49, 2
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp34, i32 %mul35, i32 1, i32 1)
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp36, i32 256, i32 1, i32 1)
%50 = bitcast { i64, i32 }* %agg.tmp34.coerce to i8*
%51 = bitcast %struct.dim3* %agg.tmp34 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %50, i8* align 4 %51, i64 12, i1 false)
%52 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp34.coerce, i32 0, i32 0
%53 = load i64, i64* %52, align 4
%54 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp34.coerce, i32 0, i32 1
%55 = load i32, i32* %54, align 4
%56 = bitcast { i64, i32 }* %agg.tmp36.coerce to i8*
%57 = bitcast %struct.dim3* %agg.tmp36 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %56, i8* align 4 %57, i64 12, i1 false)
%58 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp36.coerce, i32 0, i32 0
%59 = load i64, i64* %58, align 4
%60 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp36.coerce, i32 0, i32 1
%61 = load i32, i32* %60, align 4
%call37 = call i32 @__cudaPushCallConfiguration(i64 %53, i32 %55, i64 %59, i32 %61, i64 0, i8* null)
%tobool38 = icmp ne i32 %call37, 0
br i1 %tobool38, label %kcall.end41, label %kcall.configok39
kcall.configok39: ; preds = %kcall.end
%62 = load i8*, i8** %dev_buffer1, align 8
%63 = load i32, i32* %partSize, align 4
%conv40 = sext i32 %63 to i64
%64 = load i32*, i32** %dev_histo, align 8
call void @_Z12histo_kernelPhlPj(i8* %62, i64 %conv40, i32* %64)
br label %kcall.end41
kcall.end41: ; preds = %kcall.configok39, %kcall.end
%call42 = call i32 @cudaDeviceSynchronize()
br label %for.inc
for.inc: ; preds = %kcall.end41
%65 = load i32, i32* %partialNum, align 4
%mul43 = mul nsw i32 %65, 2
%66 = load i32, i32* %i, align 4
%add = add nsw i32 %66, %mul43
store i32 %add, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
%67 = load i32*, i32** %freq.addr, align 8
%68 = bitcast i32* %67 to i8*
%69 = load i32*, i32** %dev_histo, align 8
%70 = bitcast i32* %69 to i8*
%call44 = call i32 @cudaMemcpy(i8* %68, i8* %70, i64 1024, i32 2)
%71 = load i32*, i32** %dev_histo, align 8
%72 = bitcast i32* %71 to i8*
%call45 = call i32 @cudaFree(i8* %72)
%73 = load i8*, i8** %dev_buffer0, align 8
%call46 = call i32 @cudaFree(i8* %73)
%74 = load i8*, i8** %dev_buffer1, align 8
%call47 = call i32 @cudaFree(i8* %74)
ret i32 0
}
declare dso_local %struct._IO_FILE* @fopen(i8*, i8*) #1
declare dso_local void @perror(i8*) #1
; Function Attrs: noreturn nounwind
declare dso_local void @exit(i32) #5
declare dso_local i32 @fseek(%struct._IO_FILE*, i64, i32) #1
declare dso_local i64 @fread(i8*, i64, i64, %struct._IO_FILE*) #1
declare dso_local i32 @fputs(i8*, %struct._IO_FILE*) #1
declare dso_local i32 @fclose(%struct._IO_FILE*) #1
declare dso_local i32 @cudaMalloc(i8**, i64) #1
declare dso_local i32 @cudaMemset(i8*, i32, i64) #1
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_Z9gpuAssert9cudaErrorPKcib(i32 %code, i8* %file, i32 %line, i1 zeroext %abort) #0 comdat {
entry:
%code.addr = alloca i32, align 4
%file.addr = alloca i8*, align 8
%line.addr = alloca i32, align 4
%abort.addr = alloca i8, align 1
store i32 %code, i32* %code.addr, align 4
store i8* %file, i8** %file.addr, align 8
store i32 %line, i32* %line.addr, align 4
%frombool = zext i1 %abort to i8
store i8 %frombool, i8* %abort.addr, align 1
%0 = load i32, i32* %code.addr, align 4
%cmp = icmp ne i32 %0, 0
br i1 %cmp, label %if.then, label %if.end3
if.then: ; preds = %entry
%1 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%2 = load i32, i32* %code.addr, align 4
%call = call i8* @cudaGetErrorString(i32 %2)
%3 = load i8*, i8** %file.addr, align 8
%4 = load i32, i32* %line.addr, align 4
%call1 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %1, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.13, i64 0, i64 0), i8* %call, i8* %3, i32 %4)
%5 = load i8, i8* %abort.addr, align 1
%tobool = trunc i8 %5 to i1
br i1 %tobool, label %if.then2, label %if.end
if.then2: ; preds = %if.then
%6 = load i32, i32* %code.addr, align 4
call void @exit(i32 %6) #16
unreachable
if.end: ; preds = %if.then
br label %if.end3
if.end3: ; preds = %if.end, %entry
ret void
}
declare dso_local i32 @cudaMemcpy(i8*, i8*, i64, i32) #1
declare dso_local i32 @__cudaPushCallConfiguration(i64, i32, i64, i32, i64, i8*) #1
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN4dim3C2Ejjj(%struct.dim3* %this, i32 %vx, i32 %vy, i32 %vz) unnamed_addr #6 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
store i32 %vx, i32* %vx.addr, align 4
store i32 %vy, i32* %vy.addr, align 4
store i32 %vz, i32* %vz.addr, align 4
%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
store i32 %0, i32* %x, align 4
%y = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 1
%1 = load i32, i32* %vy.addr, align 4
store i32 %1, i32* %y, align 4
%z = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 2
%2 = load i32, i32* %vz.addr, align 4
store i32 %2, i32* %z, align 4
ret void
}
declare dso_local i32 @cudaDeviceSynchronize() #1
declare dso_local i32 @cudaFree(i8*) #1
; Function Attrs: noinline optnone uwtable
define dso_local void @_Z9printBitsji(i32 %val, i32 %numbits) #0 {
entry:
%val.addr = alloca i32, align 4
%numbits.addr = alloca i32, align 4
%i = alloca i32, align 4
store i32 %val, i32* %val.addr, align 4
store i32 %numbits, i32* %numbits.addr, align 4
%0 = load i32, i32* %numbits.addr, align 4
%sub = sub nsw i32 %0, 1
store i32 %sub, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%1 = load i32, i32* %i, align 4
%cmp = icmp sge i32 %1, 0
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%2 = load i32, i32* %val.addr, align 4
%3 = load i32, i32* %i, align 4
%shr = lshr i32 %2, %3
%and = and i32 %shr, 1
%add = add i32 48, %and
%call = call i32 @putchar(i32 %add)
br label %for.inc
for.inc: ; preds = %for.body
%4 = load i32, i32* %i, align 4
%dec = add nsw i32 %4, -1
store i32 %dec, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
ret void
}
declare dso_local i32 @putchar(i32) #1
; Function Attrs: noinline optnone uwtable
define dso_local %class.INode* @_Z9BuildTreeRA256_j([256 x i32]* dereferenceable(1024) %frequencies) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%frequencies.addr = alloca [256 x i32]*, align 8
%trees = alloca %"class.std::priority_queue", align 8
%ref.tmp = alloca %struct.NodeCmp, align 1
%ref.tmp1 = alloca %"class.std::vector", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%i = alloca i32, align 4
%ref.tmp4 = alloca %class.INode*, align 8
%childR = alloca %class.INode*, align 8
%childL = alloca %class.INode*, align 8
%parent = alloca %class.INode*, align 8
store [256 x i32]* %frequencies, [256 x i32]** %frequencies.addr, align 8
call void @_ZNSt6vectorIP5INodeSaIS1_EEC2Ev(%"class.std::vector"* %ref.tmp1)
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpEC2ERKS5_RKS4_(%"class.std::priority_queue"* %trees, %struct.NodeCmp* dereferenceable(1) %ref.tmp, %"class.std::vector"* dereferenceable(24) %ref.tmp1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
call void @_ZNSt6vectorIP5INodeSaIS1_EED2Ev(%"class.std::vector"* %ref.tmp1)
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %invoke.cont
%0 = load i32, i32* %i, align 4
%cmp = icmp slt i32 %0, 256
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%1 = load [256 x i32]*, [256 x i32]** %frequencies.addr, align 8
%2 = load i32, i32* %i, align 4
%idxprom = sext i32 %2 to i64
%arrayidx = getelementptr inbounds [256 x i32], [256 x i32]* %1, i64 0, i64 %idxprom
%3 = load i32, i32* %arrayidx, align 4
%cmp3 = icmp ne i32 %3, 0
br i1 %cmp3, label %if.then, label %if.end
if.then: ; preds = %for.body
%call = invoke i8* @_Znwm(i64 16) #17
to label %invoke.cont6 unwind label %lpad5
invoke.cont6: ; preds = %if.then
%4 = bitcast i8* %call to %class.LeafNode*
%5 = load [256 x i32]*, [256 x i32]** %frequencies.addr, align 8
%6 = load i32, i32* %i, align 4
%idxprom7 = sext i32 %6 to i64
%arrayidx8 = getelementptr inbounds [256 x i32], [256 x i32]* %5, i64 0, i64 %idxprom7
%7 = load i32, i32* %arrayidx8, align 4
%8 = load i32, i32* %i, align 4
%conv = trunc i32 %8 to i8
invoke void @_ZN8LeafNodeC2Eic(%class.LeafNode* %4, i32 %7, i8 signext %conv)
to label %invoke.cont10 unwind label %lpad9
invoke.cont10: ; preds = %invoke.cont6
%9 = bitcast %class.LeafNode* %4 to %class.INode*
store %class.INode* %9, %class.INode** %ref.tmp4, align 8
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4pushERKS1_(%"class.std::priority_queue"* %trees, %class.INode** dereferenceable(8) %ref.tmp4)
to label %invoke.cont11 unwind label %lpad5
invoke.cont11: ; preds = %invoke.cont10
br label %if.end
lpad: ; preds = %entry
%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
invoke void @_ZNSt6vectorIP5INodeSaIS1_EED2Ev(%"class.std::vector"* %ref.tmp1)
to label %invoke.cont2 unwind label %terminate.lpad
invoke.cont2: ; preds = %lpad
br label %eh.resume
lpad5: ; preds = %while.end, %invoke.cont24, %invoke.cont20, %invoke.cont18, %invoke.cont17, %invoke.cont15, %while.body, %while.cond, %invoke.cont10, %if.then
%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 %ehcleanup
lpad9: ; preds = %invoke.cont6
%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
call void @_ZdlPv(i8* %call) #18
br label %ehcleanup
if.end: ; preds = %invoke.cont11, %for.body
br label %for.inc
for.inc: ; preds = %if.end
%19 = load i32, i32* %i, align 4
%inc = add nsw i32 %19, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
br label %while.cond
while.cond: ; preds = %invoke.cont25, %for.end
%call13 = invoke i64 @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4sizeEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont12 unwind label %lpad5
invoke.cont12: ; preds = %while.cond
%cmp14 = icmp ugt i64 %call13, 1
br i1 %cmp14, label %while.body, label %while.end
while.body: ; preds = %invoke.cont12
%call16 = invoke dereferenceable(8) %class.INode** @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3topEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont15 unwind label %lpad5
invoke.cont15: ; preds = %while.body
%20 = load %class.INode*, %class.INode** %call16, align 8
store %class.INode* %20, %class.INode** %childR, align 8
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3popEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont17 unwind label %lpad5
invoke.cont17: ; preds = %invoke.cont15
%call19 = invoke dereferenceable(8) %class.INode** @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3topEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont18 unwind label %lpad5
invoke.cont18: ; preds = %invoke.cont17
%21 = load %class.INode*, %class.INode** %call19, align 8
store %class.INode* %21, %class.INode** %childL, align 8
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3popEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont20 unwind label %lpad5
invoke.cont20: ; preds = %invoke.cont18
%call22 = invoke i8* @_Znwm(i64 32) #17
to label %invoke.cont21 unwind label %lpad5
invoke.cont21: ; preds = %invoke.cont20
%22 = bitcast i8* %call22 to %class.InternalNode*
%23 = load %class.INode*, %class.INode** %childR, align 8
%24 = load %class.INode*, %class.INode** %childL, align 8
invoke void @_ZN12InternalNodeC2EP5INodeS1_(%class.InternalNode* %22, %class.INode* %23, %class.INode* %24)
to label %invoke.cont24 unwind label %lpad23
invoke.cont24: ; preds = %invoke.cont21
%25 = bitcast %class.InternalNode* %22 to %class.INode*
store %class.INode* %25, %class.INode** %parent, align 8
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4pushERKS1_(%"class.std::priority_queue"* %trees, %class.INode** dereferenceable(8) %parent)
to label %invoke.cont25 unwind label %lpad5
invoke.cont25: ; preds = %invoke.cont24
br label %while.cond
lpad23: ; preds = %invoke.cont21
%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
call void @_ZdlPv(i8* %call22) #18
br label %ehcleanup
while.end: ; preds = %invoke.cont12
%call27 = invoke dereferenceable(8) %class.INode** @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3topEv(%"class.std::priority_queue"* %trees)
to label %invoke.cont26 unwind label %lpad5
invoke.cont26: ; preds = %while.end
%29 = load %class.INode*, %class.INode** %call27, align 8
call void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpED2Ev(%"class.std::priority_queue"* %trees)
ret %class.INode* %29
ehcleanup: ; preds = %lpad23, %lpad9, %lpad5
invoke void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpED2Ev(%"class.std::priority_queue"* %trees)
to label %invoke.cont28 unwind label %terminate.lpad
invoke.cont28: ; preds = %ehcleanup
br label %eh.resume
eh.resume: ; preds = %invoke.cont28, %invoke.cont2
%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.val29 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val29
terminate.lpad: ; preds = %ehcleanup, %lpad
%30 = landingpad { i8*, i32 }
catch i8* null
%31 = extractvalue { i8*, i32 } %30, 0
call void @__clang_call_terminate(i8* %31) #16
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EEC2Ev(%"class.std::vector"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2Ev(%"struct.std::_Vector_base"* %0)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpEC2ERKS5_RKS4_(%"class.std::priority_queue"* %this, %struct.NodeCmp* dereferenceable(1) %__x, %"class.std::vector"* dereferenceable(24) %__s) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
%__x.addr = alloca %struct.NodeCmp*, align 8
%__s.addr = alloca %"class.std::vector"*, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%agg.tmp3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp8 = alloca %struct.NodeCmp, align 1
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
store %struct.NodeCmp* %__x, %struct.NodeCmp** %__x.addr, align 8
store %"class.std::vector"* %__s, %"class.std::vector"** %__s.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%0 = load %"class.std::vector"*, %"class.std::vector"** %__s.addr, align 8
call void @_ZNSt6vectorIP5INodeSaIS1_EEC2ERKS3_(%"class.std::vector"* %c, %"class.std::vector"* dereferenceable(24) %0)
%comp = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 1
%1 = load %struct.NodeCmp*, %struct.NodeCmp** %__x.addr, align 8
%c2 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call = invoke %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %c2)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive, align 8
%c4 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call6 = invoke %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %c4)
to label %invoke.cont5 unwind label %lpad
invoke.cont5: ; preds = %invoke.cont
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
store %class.INode** %call6, %class.INode*** %coerce.dive7, align 8
%comp9 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 1
%coerce.dive10 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive10, align 8
%coerce.dive11 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
%3 = load %class.INode**, %class.INode*** %coerce.dive11, align 8
invoke void @_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %2, %class.INode** %3)
to label %invoke.cont12 unwind label %lpad
invoke.cont12: ; preds = %invoke.cont5
ret void
lpad: ; preds = %invoke.cont5, %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
invoke void @_ZNSt6vectorIP5INodeSaIS1_EED2Ev(%"class.std::vector"* %c)
to label %invoke.cont13 unwind label %terminate.lpad
invoke.cont13: ; preds = %lpad
br label %eh.resume
eh.resume: ; preds = %invoke.cont13
%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.val14 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val14
terminate.lpad: ; preds = %lpad
%7 = landingpad { i8*, i32 }
catch i8* null
%8 = extractvalue { i8*, i32 } %7, 0
call void @__clang_call_terminate(i8* %8) #16
unreachable
}
declare dso_local i32 @__gxx_personality_v0(...)
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EED2Ev(%"class.std::vector"* %this) unnamed_addr #0 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
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %_M_start, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2, i32 0, i32 1
%3 = load %class.INode**, %class.INode*** %_M_finish, align 8
%4 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call = invoke dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %4)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
invoke void @_ZSt8_DestroyIPP5INodeS1_EvT_S3_RSaIT0_E(%class.INode** %1, %class.INode** %3, %"class.std::allocator"* dereferenceable(1) %call)
to label %invoke.cont3 unwind label %lpad
invoke.cont3: ; preds = %invoke.cont
%5 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EED2Ev(%"struct.std::_Vector_base"* %5)
ret void
lpad: ; preds = %invoke.cont, %entry
%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
%9 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
invoke void @_ZNSt12_Vector_baseIP5INodeSaIS1_EED2Ev(%"struct.std::_Vector_base"* %9)
to label %invoke.cont4 unwind label %terminate.lpad
invoke.cont4: ; preds = %lpad
br label %eh.resume
eh.resume: ; preds = %invoke.cont4
%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
terminate.lpad: ; preds = %lpad
%10 = landingpad { i8*, i32 }
catch i8* null
%11 = extractvalue { i8*, i32 } %10, 0
call void @__clang_call_terminate(i8* %11) #16
unreachable
}
; Function Attrs: noinline noreturn nounwind
define linkonce_odr hidden void @__clang_call_terminate(i8* %0) #7 comdat {
%2 = call i8* @__cxa_begin_catch(i8* %0) #3
call void @_ZSt9terminatev() #16
unreachable
}
declare dso_local i8* @__cxa_begin_catch(i8*)
declare dso_local void @_ZSt9terminatev()
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4pushERKS1_(%"class.std::priority_queue"* %this, %class.INode** dereferenceable(8) %__x) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
%__x.addr = alloca %class.INode**, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp7 = alloca %struct.NodeCmp, align 1
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
store %class.INode** %__x, %class.INode*** %__x.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %__x.addr, align 8
call void @_ZNSt6vectorIP5INodeSaIS1_EE9push_backERKS1_(%"class.std::vector"* %c, %class.INode** dereferenceable(8) %0)
%c2 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %c2)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive, align 8
%c4 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call5 = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %c4)
%coerce.dive6 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
store %class.INode** %call5, %class.INode*** %coerce.dive6, align 8
%comp = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 1
%coerce.dive8 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive8, align 8
%coerce.dive9 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive9, align 8
call void @_ZSt9push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %1, %class.INode** %2)
ret void
}
; Function Attrs: nobuiltin
declare dso_local noalias i8* @_Znwm(i64) #8
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN8LeafNodeC2Eic(%class.LeafNode* %this, i32 %f, i8 signext %c) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %class.LeafNode*, align 8
%f.addr = alloca i32, align 4
%c.addr = alloca i8, align 1
store %class.LeafNode* %this, %class.LeafNode** %this.addr, align 8
store i32 %f, i32* %f.addr, align 4
store i8 %c, i8* %c.addr, align 1
%this1 = load %class.LeafNode*, %class.LeafNode** %this.addr, align 8
%0 = bitcast %class.LeafNode* %this1 to %class.INode*
%1 = load i32, i32* %f.addr, align 4
call void @_ZN5INodeC2Ei(%class.INode* %0, i32 %1)
%2 = bitcast %class.LeafNode* %this1 to i32 (...)***
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [4 x i8*] }, { [4 x i8*] }* @_ZTV8LeafNode, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %2, align 8
%c2 = getelementptr inbounds %class.LeafNode, %class.LeafNode* %this1, i32 0, i32 1
%3 = load i8, i8* %c.addr, align 1
store i8 %3, i8* %c2, align 4
ret void
}
; Function Attrs: nobuiltin nounwind
declare dso_local void @_ZdlPv(i8*) #9
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE4sizeEv(%"class.std::priority_queue"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %c)
ret i64 %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode** @_ZNKSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3topEv(%"class.std::priority_queue"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call = call dereferenceable(8) %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE5frontEv(%"class.std::vector"* %c)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpE3popEv(%"class.std::priority_queue"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp6 = alloca %struct.NodeCmp, align 1
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %c)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive, align 8
%c3 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
%call4 = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %c3)
%coerce.dive5 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2, i32 0, i32 0
store %class.INode** %call4, %class.INode*** %coerce.dive5, align 8
%comp = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 1
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
%coerce.dive8 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive8, align 8
call void @_ZSt8pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %0, %class.INode** %1)
%c9 = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
call void @_ZNSt6vectorIP5INodeSaIS1_EE8pop_backEv(%"class.std::vector"* %c9)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN12InternalNodeC2EP5INodeS1_(%class.InternalNode* %this, %class.INode* %c0, %class.INode* %c1) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %class.InternalNode*, align 8
%c0.addr = alloca %class.INode*, align 8
%c1.addr = alloca %class.INode*, align 8
store %class.InternalNode* %this, %class.InternalNode** %this.addr, align 8
store %class.INode* %c0, %class.INode** %c0.addr, align 8
store %class.INode* %c1, %class.INode** %c1.addr, align 8
%this1 = load %class.InternalNode*, %class.InternalNode** %this.addr, align 8
%0 = bitcast %class.InternalNode* %this1 to %class.INode*
%1 = load %class.INode*, %class.INode** %c0.addr, align 8
%f = getelementptr inbounds %class.INode, %class.INode* %1, i32 0, i32 1
%2 = load i32, i32* %f, align 8
%3 = load %class.INode*, %class.INode** %c1.addr, align 8
%f2 = getelementptr inbounds %class.INode, %class.INode* %3, i32 0, i32 1
%4 = load i32, i32* %f2, align 8
%add = add nsw i32 %2, %4
call void @_ZN5INodeC2Ei(%class.INode* %0, i32 %add)
%5 = bitcast %class.InternalNode* %this1 to i32 (...)***
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [4 x i8*] }, { [4 x i8*] }* @_ZTV12InternalNode, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %5, align 8
%left = getelementptr inbounds %class.InternalNode, %class.InternalNode* %this1, i32 0, i32 1
%6 = load %class.INode*, %class.INode** %c0.addr, align 8
store %class.INode* %6, %class.INode** %left, align 8
%right = getelementptr inbounds %class.InternalNode, %class.InternalNode* %this1, i32 0, i32 2
%7 = load %class.INode*, %class.INode** %c1.addr, align 8
store %class.INode* %7, %class.INode** %right, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt14priority_queueIP5INodeSt6vectorIS1_SaIS1_EE7NodeCmpED2Ev(%"class.std::priority_queue"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::priority_queue"*, align 8
store %"class.std::priority_queue"* %this, %"class.std::priority_queue"** %this.addr, align 8
%this1 = load %"class.std::priority_queue"*, %"class.std::priority_queue"** %this.addr, align 8
%c = getelementptr inbounds %"class.std::priority_queue", %"class.std::priority_queue"* %this1, i32 0, i32 0
call void @_ZNSt6vectorIP5INodeSaIS1_EED2Ev(%"class.std::vector"* %c)
ret void
}
; Function Attrs: noinline optnone uwtable
define dso_local void @_Z13GenerateCodesPK5INodeRKSt6vectorIbSaIbEERSt3mapIhS4_St4lessIhESaISt4pairIKhS4_EEE(%class.INode* %node, %"class.std::vector.0"* dereferenceable(40) %prefix, %"class.std::map"* dereferenceable(48) %outCodes) #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%node.addr = alloca %class.INode*, align 8
%prefix.addr = alloca %"class.std::vector.0"*, align 8
%outCodes.addr = alloca %"class.std::map"*, align 8
%lf = alloca %class.LeafNode*, align 8
%ref.tmp = alloca i8, align 1
%in = alloca %class.InternalNode*, align 8
%leftPrefix = alloca %"class.std::vector.0", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%rightPrefix = alloca %"class.std::vector.0", align 8
store %class.INode* %node, %class.INode** %node.addr, align 8
store %"class.std::vector.0"* %prefix, %"class.std::vector.0"** %prefix.addr, align 8
store %"class.std::map"* %outCodes, %"class.std::map"** %outCodes.addr, align 8
%0 = load %class.INode*, %class.INode** %node.addr, align 8
%1 = icmp eq %class.INode* %0, null
br i1 %1, label %dynamic_cast.null, label %dynamic_cast.notnull
dynamic_cast.notnull: ; preds = %entry
%2 = bitcast %class.INode* %0 to i8*
%3 = call i8* @__dynamic_cast(i8* %2, i8* bitcast ({ i8*, i8* }* @_ZTI5INode to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI8LeafNode to i8*), i64 0) #3
%4 = bitcast i8* %3 to %class.LeafNode*
br label %dynamic_cast.end
dynamic_cast.null: ; preds = %entry
br label %dynamic_cast.end
dynamic_cast.end: ; preds = %dynamic_cast.null, %dynamic_cast.notnull
%5 = phi %class.LeafNode* [ %4, %dynamic_cast.notnull ], [ null, %dynamic_cast.null ]
store %class.LeafNode* %5, %class.LeafNode** %lf, align 8
%6 = load %class.LeafNode*, %class.LeafNode** %lf, align 8
%tobool = icmp ne %class.LeafNode* %6, null
br i1 %tobool, label %if.then, label %if.else
if.then: ; preds = %dynamic_cast.end
%7 = load %"class.std::vector.0"*, %"class.std::vector.0"** %prefix.addr, align 8
%8 = load %"class.std::map"*, %"class.std::map"** %outCodes.addr, align 8
%9 = load %class.LeafNode*, %class.LeafNode** %lf, align 8
%c = getelementptr inbounds %class.LeafNode, %class.LeafNode* %9, i32 0, i32 1
%10 = load i8, i8* %c, align 4
store i8 %10, i8* %ref.tmp, align 1
%call = call dereferenceable(40) %"class.std::vector.0"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEixERS6_(%"class.std::map"* %8, i8* dereferenceable(1) %ref.tmp)
%call1 = call dereferenceable(40) %"class.std::vector.0"* @_ZNSt6vectorIbSaIbEEaSERKS1_(%"class.std::vector.0"* %call, %"class.std::vector.0"* dereferenceable(40) %7)
br label %if.end15
if.else: ; preds = %dynamic_cast.end
%11 = load %class.INode*, %class.INode** %node.addr, align 8
%12 = icmp eq %class.INode* %11, null
br i1 %12, label %dynamic_cast.null3, label %dynamic_cast.notnull2
dynamic_cast.notnull2: ; preds = %if.else
%13 = bitcast %class.INode* %11 to i8*
%14 = call i8* @__dynamic_cast(i8* %13, i8* bitcast ({ i8*, i8* }* @_ZTI5INode to i8*), i8* bitcast ({ i8*, i8*, i8* }* @_ZTI12InternalNode to i8*), i64 0) #3
%15 = bitcast i8* %14 to %class.InternalNode*
br label %dynamic_cast.end4
dynamic_cast.null3: ; preds = %if.else
br label %dynamic_cast.end4
dynamic_cast.end4: ; preds = %dynamic_cast.null3, %dynamic_cast.notnull2
%16 = phi %class.InternalNode* [ %15, %dynamic_cast.notnull2 ], [ null, %dynamic_cast.null3 ]
store %class.InternalNode* %16, %class.InternalNode** %in, align 8
%17 = load %class.InternalNode*, %class.InternalNode** %in, align 8
%tobool5 = icmp ne %class.InternalNode* %17, null
br i1 %tobool5, label %if.then6, label %if.end
if.then6: ; preds = %dynamic_cast.end4
%18 = load %"class.std::vector.0"*, %"class.std::vector.0"** %prefix.addr, align 8
call void @_ZNSt6vectorIbSaIbEEC2ERKS1_(%"class.std::vector.0"* %leftPrefix, %"class.std::vector.0"* dereferenceable(40) %18)
invoke void @_ZNSt6vectorIbSaIbEE9push_backEb(%"class.std::vector.0"* %leftPrefix, i1 zeroext false)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %if.then6
%19 = load %class.InternalNode*, %class.InternalNode** %in, align 8
%left = getelementptr inbounds %class.InternalNode, %class.InternalNode* %19, i32 0, i32 1
%20 = load %class.INode*, %class.INode** %left, align 8
%21 = load %"class.std::map"*, %"class.std::map"** %outCodes.addr, align 8
invoke void @_Z13GenerateCodesPK5INodeRKSt6vectorIbSaIbEERSt3mapIhS4_St4lessIhESaISt4pairIKhS4_EEE(%class.INode* %20, %"class.std::vector.0"* dereferenceable(40) %leftPrefix, %"class.std::map"* dereferenceable(48) %21)
to label %invoke.cont7 unwind label %lpad
invoke.cont7: ; preds = %invoke.cont
%22 = load %"class.std::vector.0"*, %"class.std::vector.0"** %prefix.addr, align 8
invoke void @_ZNSt6vectorIbSaIbEEC2ERKS1_(%"class.std::vector.0"* %rightPrefix, %"class.std::vector.0"* dereferenceable(40) %22)
to label %invoke.cont8 unwind label %lpad
invoke.cont8: ; preds = %invoke.cont7
invoke void @_ZNSt6vectorIbSaIbEE9push_backEb(%"class.std::vector.0"* %rightPrefix, i1 zeroext true)
to label %invoke.cont10 unwind label %lpad9
invoke.cont10: ; preds = %invoke.cont8
%23 = load %class.InternalNode*, %class.InternalNode** %in, align 8
%right = getelementptr inbounds %class.InternalNode, %class.InternalNode* %23, i32 0, i32 2
%24 = load %class.INode*, %class.INode** %right, align 8
%25 = load %"class.std::map"*, %"class.std::map"** %outCodes.addr, align 8
invoke void @_Z13GenerateCodesPK5INodeRKSt6vectorIbSaIbEERSt3mapIhS4_St4lessIhESaISt4pairIKhS4_EEE(%class.INode* %24, %"class.std::vector.0"* dereferenceable(40) %rightPrefix, %"class.std::map"* dereferenceable(48) %25)
to label %invoke.cont11 unwind label %lpad9
invoke.cont11: ; preds = %invoke.cont10
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %rightPrefix)
to label %invoke.cont12 unwind label %lpad
invoke.cont12: ; preds = %invoke.cont11
call void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %leftPrefix)
br label %if.end
lpad: ; preds = %invoke.cont11, %invoke.cont7, %invoke.cont, %if.then6
%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
br label %ehcleanup
lpad9: ; preds = %invoke.cont10, %invoke.cont8
%29 = landingpad { i8*, i32 }
cleanup
%30 = extractvalue { i8*, i32 } %29, 0
store i8* %30, i8** %exn.slot, align 8
%31 = extractvalue { i8*, i32 } %29, 1
store i32 %31, i32* %ehselector.slot, align 4
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %rightPrefix)
to label %invoke.cont13 unwind label %terminate.lpad
invoke.cont13: ; preds = %lpad9
br label %ehcleanup
ehcleanup: ; preds = %invoke.cont13, %lpad
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %leftPrefix)
to label %invoke.cont14 unwind label %terminate.lpad
invoke.cont14: ; preds = %ehcleanup
br label %eh.resume
if.end: ; preds = %invoke.cont12, %dynamic_cast.end4
br label %if.end15
if.end15: ; preds = %if.end, %if.then
ret void
eh.resume: ; preds = %invoke.cont14
%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.val16 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val16
terminate.lpad: ; preds = %ehcleanup, %lpad9
%32 = landingpad { i8*, i32 }
catch i8* null
%33 = extractvalue { i8*, i32 } %32, 0
call void @__clang_call_terminate(i8* %33) #16
unreachable
}
; Function Attrs: nounwind readonly
declare dso_local i8* @__dynamic_cast(i8*, i8*, i8*, i64) #10
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(40) %"class.std::vector.0"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEixERS6_(%"class.std::map"* %this, i8* dereferenceable(1) %__k) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::map"*, align 8
%__k.addr = alloca i8*, align 8
%__i = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp5 = alloca %"struct.std::less", align 1
%undef.agg.tmp = alloca %"struct.std::less", align 1
%ref.tmp8 = alloca %"struct.std::_Rb_tree_iterator", align 8
%agg.tmp = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp9 = alloca %"struct.std::pair", align 8
%ref.tmp10 = alloca %"class.std::vector.0", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
store i8* %__k, i8** %__k.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%0 = load i8*, i8** %__k.addr, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE11lower_boundERS6_(%"class.std::map"* %this1, i8* dereferenceable(1) %0)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__i, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%call2 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE3endEv(%"class.std::map"* %this1)
%coerce.dive3 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %ref.tmp, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call2, %"struct.std::_Rb_tree_node_base"** %coerce.dive3, align 8
%call4 = call zeroext i1 @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEeqERKS6_(%"struct.std::_Rb_tree_iterator"* %__i, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %ref.tmp)
br i1 %call4, label %lor.end, label %lor.rhs
lor.rhs: ; preds = %entry
call void @_ZNKSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE8key_compEv(%"class.std::map"* %this1)
%1 = load i8*, i8** %__k.addr, align 8
%call6 = call dereferenceable(48) %"struct.std::pair"* @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEdeEv(%"struct.std::_Rb_tree_iterator"* %__i)
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call6, i32 0, i32 0
%call7 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %ref.tmp5, i8* dereferenceable(1) %1, i8* dereferenceable(1) %first)
br label %lor.end
lor.end: ; preds = %lor.rhs, %entry
%2 = phi i1 [ true, %entry ], [ %call7, %lor.rhs ]
br i1 %2, label %if.then, label %if.end
if.then: ; preds = %lor.end
%3 = bitcast %"struct.std::_Rb_tree_iterator"* %agg.tmp to i8*
%4 = bitcast %"struct.std::_Rb_tree_iterator"* %__i to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false)
%5 = load i8*, i8** %__k.addr, align 8
call void @_ZNSt6vectorIbSaIbEEC2Ev(%"class.std::vector.0"* %ref.tmp10)
invoke void @_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERS0_RKS3_(%"struct.std::pair"* %ref.tmp9, i8* dereferenceable(1) %5, %"class.std::vector.0"* dereferenceable(40) %ref.tmp10)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %if.then
%coerce.dive11 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %agg.tmp, i32 0, i32 0
%6 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive11, align 8
%call14 = invoke %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE6insertESt17_Rb_tree_iteratorIS7_ERKS7_(%"class.std::map"* %this1, %"struct.std::_Rb_tree_node_base"* %6, %"struct.std::pair"* dereferenceable(48) %ref.tmp9)
to label %invoke.cont13 unwind label %lpad12
invoke.cont13: ; preds = %invoke.cont
%coerce.dive15 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %ref.tmp8, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call14, %"struct.std::_Rb_tree_node_base"** %coerce.dive15, align 8
%7 = bitcast %"struct.std::_Rb_tree_iterator"* %__i to i8*
%8 = bitcast %"struct.std::_Rb_tree_iterator"* %ref.tmp8 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %7, i8* align 8 %8, i64 8, i1 false)
invoke void @_ZNSt4pairIKhSt6vectorIbSaIbEEED2Ev(%"struct.std::pair"* %ref.tmp9)
to label %invoke.cont16 unwind label %lpad
invoke.cont16: ; preds = %invoke.cont13
call void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %ref.tmp10)
br label %if.end
lpad: ; preds = %invoke.cont13, %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 %ehcleanup
lpad12: ; preds = %invoke.cont
%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
invoke void @_ZNSt4pairIKhSt6vectorIbSaIbEEED2Ev(%"struct.std::pair"* %ref.tmp9)
to label %invoke.cont17 unwind label %terminate.lpad
invoke.cont17: ; preds = %lpad12
br label %ehcleanup
ehcleanup: ; preds = %invoke.cont17, %lpad
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %ref.tmp10)
to label %invoke.cont18 unwind label %terminate.lpad
invoke.cont18: ; preds = %ehcleanup
br label %eh.resume
if.end: ; preds = %invoke.cont16, %lor.end
%call19 = call dereferenceable(48) %"struct.std::pair"* @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEdeEv(%"struct.std::_Rb_tree_iterator"* %__i)
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call19, i32 0, i32 1
ret %"class.std::vector.0"* %second
eh.resume: ; preds = %invoke.cont18
%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
terminate.lpad: ; preds = %ehcleanup, %lpad12
%15 = landingpad { i8*, i32 }
catch i8* null
%16 = extractvalue { i8*, i32 } %15, 0
call void @__clang_call_terminate(i8* %16) #16
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(40) %"class.std::vector.0"* @_ZNSt6vectorIbSaIbEEaSERKS1_(%"class.std::vector.0"* %this, %"class.std::vector.0"* dereferenceable(40) %__x) #0 comdat align 2 {
entry:
%retval = alloca %"class.std::vector.0"*, align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
%__x.addr = alloca %"class.std::vector.0"*, align 8
%ref.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp8 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp10 = alloca %"struct.std::_Bit_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
store %"class.std::vector.0"* %__x, %"class.std::vector.0"** %__x.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%cmp = icmp eq %"class.std::vector.0"* %0, %this1
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
store %"class.std::vector.0"* %this1, %"class.std::vector.0"** %retval, align 8
br label %return
if.end: ; preds = %entry
%1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %1)
%call2 = call i64 @_ZNKSt6vectorIbSaIbEE8capacityEv(%"class.std::vector.0"* %this1)
%cmp3 = icmp ugt i64 %call, %call2
br i1 %cmp3, label %if.then4, label %if.end6
if.then4: ; preds = %if.end
%2 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
call void @_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv(%"struct.std::_Bvector_base"* %2)
%3 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call5 = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %3)
call void @_ZNSt6vectorIbSaIbEE13_M_initializeEm(%"class.std::vector.0"* %this1, i64 %call5)
br label %if.end6
if.end6: ; preds = %if.then4, %if.end
%4 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call7 = call { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %4)
%5 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%6 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %5, i32 0, i32 0
%7 = extractvalue { i64*, i32 } %call7, 0
store i64* %7, i64** %6, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %5, i32 0, i32 1
%9 = extractvalue { i64*, i32 } %call7, 1
store i32 %9, i32* %8, align 8
%10 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call9 = call { i64*, i32 } @_ZNKSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %10)
%11 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp8 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = extractvalue { i64*, i32 } %call9, 0
store i64* %13, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = extractvalue { i64*, i32 } %call9, 1
store i32 %15, i32* %14, align 8
%call11 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this1)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp10 to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call11, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call11, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%22 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %21, i32 0, i32 0
%23 = load i64*, i64** %22, align 8
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %21, i32 0, i32 1
%25 = load i32, i32* %24, align 8
%26 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp8 to { i64*, i32 }*
%27 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %26, i32 0, i32 0
%28 = load i64*, i64** %27, align 8
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %26, i32 0, i32 1
%30 = load i32, i32* %29, align 8
%call12 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE15_M_copy_alignedESt19_Bit_const_iteratorS2_St13_Bit_iterator(%"class.std::vector.0"* %this1, i64* %23, i32 %25, i64* %28, i32 %30, %"struct.std::_Bit_iterator"* byval(%"struct.std::_Bit_iterator") align 8 %agg.tmp10)
%31 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp to { i64*, i32 }*
%32 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %31, i32 0, i32 0
%33 = extractvalue { i64*, i32 } %call12, 0
store i64* %33, i64** %32, align 8
%34 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %31, i32 0, i32 1
%35 = extractvalue { i64*, i32 } %call12, 1
store i32 %35, i32* %34, align 8
%36 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %36, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 1
%37 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to i8*
%38 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %37, i8* align 8 %38, i64 12, i1 false)
store %"class.std::vector.0"* %this1, %"class.std::vector.0"** %retval, align 8
br label %return
return: ; preds = %if.end6, %if.then
%39 = load %"class.std::vector.0"*, %"class.std::vector.0"** %retval, align 8
ret %"class.std::vector.0"* %39
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEEC2ERKS1_(%"class.std::vector.0"* %this, %"class.std::vector.0"* dereferenceable(40) %__x) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__x.addr = alloca %"class.std::vector.0"*, align 8
%ref.tmp = alloca %"class.std::allocator.13", align 1
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp9 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp12 = alloca %"struct.std::_Bit_iterator", align 8
%coerce = alloca %"struct.std::_Bit_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
store %"class.std::vector.0"* %__x, %"class.std::vector.0"** %__x.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%2 = bitcast %"class.std::vector.0"* %1 to %"struct.std::_Bvector_base"*
%call = call dereferenceable(1) %"class.std::allocator.1"* @_ZNKSt13_Bvector_baseISaIbEE20_M_get_Bit_allocatorEv(%"struct.std::_Bvector_base"* %2)
%call2 = call dereferenceable(1) %"class.std::allocator.1"* @_ZN9__gnu_cxx14__alloc_traitsISaImEE17_S_select_on_copyERKS1_(%"class.std::allocator.1"* dereferenceable(1) %call)
call void @_ZNSaIbEC2ImEERKSaIT_E(%"class.std::allocator.13"* %ref.tmp, %"class.std::allocator.1"* dereferenceable(1) %call2) #3
invoke void @_ZNSt13_Bvector_baseISaIbEEC2ERKS0_(%"struct.std::_Bvector_base"* %0, %"class.std::allocator.13"* dereferenceable(1) %ref.tmp)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
call void @_ZNSaIbED2Ev(%"class.std::allocator.13"* %ref.tmp) #3
%3 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call5 = invoke i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %3)
to label %invoke.cont4 unwind label %lpad3
invoke.cont4: ; preds = %invoke.cont
invoke void @_ZNSt6vectorIbSaIbEE13_M_initializeEm(%"class.std::vector.0"* %this1, i64 %call5)
to label %invoke.cont6 unwind label %lpad3
invoke.cont6: ; preds = %invoke.cont4
%4 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call8 = invoke { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %4)
to label %invoke.cont7 unwind label %lpad3
invoke.cont7: ; preds = %invoke.cont6
%5 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%6 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %5, i32 0, i32 0
%7 = extractvalue { i64*, i32 } %call8, 0
store i64* %7, i64** %6, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %5, i32 0, i32 1
%9 = extractvalue { i64*, i32 } %call8, 1
store i32 %9, i32* %8, align 8
%10 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__x.addr, align 8
%call11 = invoke { i64*, i32 } @_ZNKSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %10)
to label %invoke.cont10 unwind label %lpad3
invoke.cont10: ; preds = %invoke.cont7
%11 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp9 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = extractvalue { i64*, i32 } %call11, 0
store i64* %13, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = extractvalue { i64*, i32 } %call11, 1
store i32 %15, i32* %14, align 8
%16 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %16, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 0
%17 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp12 to i8*
%18 = bitcast %"struct.std::_Bit_iterator"* %_M_start to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %17, i8* align 8 %18, i64 16, i1 false)
%19 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%20 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %19, i32 0, i32 0
%21 = load i64*, i64** %20, align 8
%22 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %19, i32 0, i32 1
%23 = load i32, i32* %22, align 8
%24 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp9 to { i64*, i32 }*
%25 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %24, i32 0, i32 0
%26 = load i64*, i64** %25, align 8
%27 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %24, i32 0, i32 1
%28 = load i32, i32* %27, align 8
%call14 = invoke { i64*, i32 } @_ZNSt6vectorIbSaIbEE15_M_copy_alignedESt19_Bit_const_iteratorS2_St13_Bit_iterator(%"class.std::vector.0"* %this1, i64* %21, i32 %23, i64* %26, i32 %28, %"struct.std::_Bit_iterator"* byval(%"struct.std::_Bit_iterator") align 8 %agg.tmp12)
to label %invoke.cont13 unwind label %lpad3
invoke.cont13: ; preds = %invoke.cont10
%29 = bitcast %"struct.std::_Bit_iterator"* %coerce to { i64*, i32 }*
%30 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %29, i32 0, i32 0
%31 = extractvalue { i64*, i32 } %call14, 0
store i64* %31, i64** %30, align 8
%32 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %29, i32 0, i32 1
%33 = extractvalue { i64*, i32 } %call14, 1
store i32 %33, i32* %32, align 8
ret void
lpad: ; preds = %entry
%34 = landingpad { i8*, i32 }
cleanup
%35 = extractvalue { i8*, i32 } %34, 0
store i8* %35, i8** %exn.slot, align 8
%36 = extractvalue { i8*, i32 } %34, 1
store i32 %36, i32* %ehselector.slot, align 4
call void @_ZNSaIbED2Ev(%"class.std::allocator.13"* %ref.tmp) #3
br label %eh.resume
lpad3: ; preds = %invoke.cont10, %invoke.cont7, %invoke.cont6, %invoke.cont4, %invoke.cont
%37 = landingpad { i8*, i32 }
cleanup
%38 = extractvalue { i8*, i32 } %37, 0
store i8* %38, i8** %exn.slot, align 8
%39 = extractvalue { i8*, i32 } %37, 1
store i32 %39, i32* %ehselector.slot, align 4
%40 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
invoke void @_ZNSt13_Bvector_baseISaIbEED2Ev(%"struct.std::_Bvector_base"* %40)
to label %invoke.cont15 unwind label %terminate.lpad
invoke.cont15: ; preds = %lpad3
br label %eh.resume
eh.resume: ; preds = %invoke.cont15, %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.val16 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val16
terminate.lpad: ; preds = %lpad3
%41 = landingpad { i8*, i32 }
catch i8* null
%42 = extractvalue { i8*, i32 } %41, 0
call void @__clang_call_terminate(i8* %42) #16
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEE9push_backEb(%"class.std::vector.0"* %this, i1 zeroext %__x) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__x.addr = alloca i8, align 1
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
%ref.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%frombool = zext i1 %__x to i8
store i8 %frombool, i8* %__x.addr, align 1
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 1
%1 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %1, i32 0, i32 0
%2 = load i64*, i64** %_M_p, align 8
%3 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl2 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %3, i32 0, i32 0
%call = call i64* @_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl2)
%cmp = icmp ne i64* %2, %call
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%4 = load i8, i8* %__x.addr, align 1
%tobool = trunc i8 %4 to i1
%5 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl4 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %5, i32 0, i32 0
%_M_finish5 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl4, i32 0, i32 1
%call6 = call { i64*, i32 } @_ZNSt13_Bit_iteratorppEi(%"struct.std::_Bit_iterator"* %_M_finish5, i32 0)
%6 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp3 to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
%8 = extractvalue { i64*, i32 } %call6, 0
store i64* %8, i64** %7, align 8
%9 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
%10 = extractvalue { i64*, i32 } %call6, 1
store i32 %10, i32* %9, align 8
%call7 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %ref.tmp3)
%11 = bitcast %"struct.std::_Bit_reference"* %ref.tmp to { i64*, i64 }*
%12 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %11, i32 0, i32 0
%13 = extractvalue { i64*, i64 } %call7, 0
store i64* %13, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %11, i32 0, i32 1
%15 = extractvalue { i64*, i64 } %call7, 1
store i64 %15, i64* %14, align 8
%call8 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %ref.tmp, i1 zeroext %tobool)
br label %if.end
if.else: ; preds = %entry
%call9 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %this1)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call9, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call9, 1
store i32 %20, i32* %19, align 8
%21 = load i8, i8* %__x.addr, align 1
%tobool10 = trunc i8 %21 to i1
%22 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%23 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %22, i32 0, i32 0
%24 = load i64*, i64** %23, align 8
%25 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %22, i32 0, i32 1
%26 = load i32, i32* %25, align 8
call void @_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb(%"class.std::vector.0"* %this1, i64* %24, i32 %26, i1 zeroext %tobool10)
br label %if.end
if.end: ; preds = %if.else, %if.then
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
call void @_ZNSt13_Bvector_baseISaIbEED2Ev(%"struct.std::_Bvector_base"* %0)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define dso_local i64 @_Z8get_timev() #6 {
entry:
%tv = alloca %struct.timeval, align 8
%call = call i32 @gettimeofday(%struct.timeval* %tv, %struct.timezone* null) #3
%tv_sec = getelementptr inbounds %struct.timeval, %struct.timeval* %tv, i32 0, i32 0
%0 = load i64, i64* %tv_sec, align 8
%mul = mul nsw i64 %0, 1000000
%tv_usec = getelementptr inbounds %struct.timeval, %struct.timeval* %tv, i32 0, i32 1
%1 = load i64, i64* %tv_usec, align 8
%add = add nsw i64 %mul, %1
ret i64 %add
}
; Function Attrs: nounwind
declare dso_local i32 @gettimeofday(%struct.timeval*, %struct.timezone*) #11
; Function Attrs: noinline norecurse optnone uwtable
define dso_local i32 @main(i32 %argc, i8** %argv) #12 {
entry:
%retval = alloca i32, align 4
%argc.addr = alloca i32, align 4
%argv.addr = alloca i8**, align 8
%num_block_threads = alloca i32, align 4
%i = alloca i32, align 4
store i32 0, i32* %retval, align 4
store i32 %argc, i32* %argc.addr, align 4
store i8** %argv, i8*** %argv.addr, align 8
%call = call zeroext i1 @_Z8InitCUDAv()
br i1 %call, label %if.end, label %if.then
if.then: ; preds = %entry
store i32 0, i32* %retval, align 4
br label %return
if.end: ; preds = %entry
store i32 256, i32* %num_block_threads, align 4
%0 = load i32, i32* %argc.addr, align 4
%cmp = icmp sgt i32 %0, 1
br i1 %cmp, label %if.then1, label %if.else
if.then1: ; preds = %if.end
store i32 1, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %if.then1
%1 = load i32, i32* %i, align 4
%2 = load i32, i32* %argc.addr, align 4
%cmp2 = icmp slt i32 %1, %2
br i1 %cmp2, label %for.body, label %for.end
for.body: ; preds = %for.cond
%3 = load i8**, i8*** %argv.addr, align 8
%4 = load i32, i32* %i, align 4
%idxprom = sext i32 %4 to i64
%arrayidx = getelementptr inbounds i8*, i8** %3, i64 %idxprom
%5 = load i8*, i8** %arrayidx, align 8
%6 = load i32, i32* %num_block_threads, align 4
call void @_Z10runVLCTestPcjj(i8* %5, i32 %6, i32 1)
br label %for.inc
for.inc: ; preds = %for.body
%7 = load i32, i32* %i, align 4
%inc = add nsw i32 %7, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
br label %if.end3
if.else: ; preds = %if.end
%8 = load i32, i32* %num_block_threads, align 4
call void @_Z10runVLCTestPcjj(i8* null, i32 %8, i32 1024)
br label %if.end3
if.end3: ; preds = %if.else, %for.end
store i32 0, i32* %retval, align 4
br label %return
return: ; preds = %if.end3, %if.then
%9 = load i32, i32* %retval, align 4
ret i32 %9
}
; Function Attrs: noinline optnone uwtable
define dso_local void @_Z10runVLCTestPcjj(i8* %file_name, i32 %num_block_threads, i32 %num_blocks) #0 {
entry:
%file_name.addr = alloca i8*, align 8
%num_block_threads.addr = alloca i32, align 4
%num_blocks.addr = alloca i32, align 4
%num_elements = alloca i32, align 4
%mem_size = alloca i32, align 4
%symbol_type_size = alloca i32, align 4
%H = alloca double, align 8
%sourceData = alloca i32*, align 8
%destData = alloca i32*, align 8
%crefData = alloca i32*, align 8
%codewords = alloca i32*, align 8
%codewordlens = alloca i32*, align 8
%cw32 = alloca i32*, align 8
%cw32len = alloca i32*, align 8
%cw32idx = alloca i32*, align 8
%cindex2 = alloca i32*, align 8
%d_sourceData = alloca i32*, align 8
%d_destData = alloca i32*, align 8
%d_destDataPacked = alloca i32*, align 8
%d_codewords = alloca i32*, align 8
%d_codewordlens = alloca i32*, align 8
%d_cw32 = alloca i32*, align 8
%d_cw32len = alloca i32*, align 8
%d_cw32idx = alloca i32*, align 8
%d_cindex = alloca i32*, align 8
%d_cindex2 = alloca i32*, align 8
%err = alloca i32, align 4
%err37 = alloca i32, align 4
%err45 = alloca i32, align 4
%err53 = alloca i32, align 4
%err62 = alloca i32, align 4
%err71 = alloca i32, align 4
%err79 = alloca i32, align 4
%err87 = alloca i32, align 4
%err95 = alloca i32, align 4
%err104 = alloca i32, align 4
%err113 = alloca i32, align 4
%err121 = alloca i32, align 4
%err130 = alloca i32, align 4
%err139 = alloca i32, align 4
%grid_size = alloca %struct.dim3, align 4
%block_size = alloca %struct.dim3, align 4
%sm_size = alloca i32, align 4
%NT = alloca i32, align 4
%refbytesize = alloca i32, align 4
%timer = alloca i64, align 8
%msec = alloca float, align 4
%num_ints = alloca i32, align 4
%i = alloca i32, align 4
%agg.tmp = alloca %struct.dim3, align 4
%agg.tmp167 = alloca %struct.dim3, align 4
%agg.tmp.coerce = alloca { i64, i32 }, align 4
%agg.tmp167.coerce = alloca { i64, i32 }, align 4
%num_scan_elements = alloca i32, align 4
%agg.tmp174 = alloca %struct.dim3, align 4
%agg.tmp176 = alloca %struct.dim3, align 4
%agg.tmp174.coerce = alloca { i64, i32 }, align 4
%agg.tmp176.coerce = alloca { i64, i32 }, align 4
%err183 = alloca i32, align 4
%err190 = alloca i32, align 4
%err199 = alloca i32, align 4
%err206 = alloca i32, align 4
%err213 = alloca i32, align 4
%err220 = alloca i32, align 4
%err227 = alloca i32, align 4
%err234 = alloca i32, align 4
%err241 = alloca i32, align 4
%err248 = alloca i32, align 4
%err255 = alloca i32, align 4
%err262 = alloca i32, align 4
store i8* %file_name, i8** %file_name.addr, align 8
store i32 %num_block_threads, i32* %num_block_threads.addr, align 4
store i32 %num_blocks, i32* %num_blocks.addr, align 4
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0))
store i32 4, i32* %symbol_type_size, align 4
%0 = load i8*, i8** %file_name.addr, align 8
%1 = load i32, i32* %num_block_threads.addr, align 4
%2 = load i32, i32* %symbol_type_size, align 4
call void @_Z10initParamsPcjRjS0_S0_j(i8* %0, i32 %1, i32* dereferenceable(4) %num_blocks.addr, i32* dereferenceable(4) %num_elements, i32* dereferenceable(4) %mem_size, i32 %2)
%3 = load i32, i32* %num_elements, align 4
%4 = load i32, i32* %num_blocks.addr, align 4
%5 = load i32, i32* %num_block_threads.addr, align 4
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([98 x i8], [98 x i8]* @.str.5, i64 0, i64 0), i32 %3, i32 %4, i32 %5)
%6 = load i32, i32* %mem_size, align 4
%conv = zext i32 %6 to i64
%call2 = call noalias i8* @malloc(i64 %conv) #3
%7 = bitcast i8* %call2 to i32*
store i32* %7, i32** %sourceData, align 8
%8 = load i32, i32* %mem_size, align 4
%conv3 = zext i32 %8 to i64
%call4 = call noalias i8* @malloc(i64 %conv3) #3
%9 = bitcast i8* %call4 to i32*
store i32* %9, i32** %destData, align 8
%10 = load i32, i32* %mem_size, align 4
%conv5 = zext i32 %10 to i64
%call6 = call noalias i8* @malloc(i64 %conv5) #3
%11 = bitcast i8* %call6 to i32*
store i32* %11, i32** %crefData, align 8
%12 = load i32, i32* %symbol_type_size, align 4
%mul = mul i32 256, %12
%conv7 = zext i32 %mul to i64
%call8 = call noalias i8* @malloc(i64 %conv7) #3
%13 = bitcast i8* %call8 to i32*
store i32* %13, i32** %codewords, align 8
%14 = load i32, i32* %symbol_type_size, align 4
%mul9 = mul i32 256, %14
%conv10 = zext i32 %mul9 to i64
%call11 = call noalias i8* @malloc(i64 %conv10) #3
%15 = bitcast i8* %call11 to i32*
store i32* %15, i32** %codewordlens, align 8
%16 = load i32, i32* %mem_size, align 4
%conv12 = zext i32 %16 to i64
%call13 = call noalias i8* @malloc(i64 %conv12) #3
%17 = bitcast i8* %call13 to i32*
store i32* %17, i32** %cw32, align 8
%18 = load i32, i32* %mem_size, align 4
%conv14 = zext i32 %18 to i64
%call15 = call noalias i8* @malloc(i64 %conv14) #3
%19 = bitcast i8* %call15 to i32*
store i32* %19, i32** %cw32len, align 8
%20 = load i32, i32* %mem_size, align 4
%conv16 = zext i32 %20 to i64
%call17 = call noalias i8* @malloc(i64 %conv16) #3
%21 = bitcast i8* %call17 to i32*
store i32* %21, i32** %cw32idx, align 8
%22 = load i32, i32* %num_blocks.addr, align 4
%conv18 = zext i32 %22 to i64
%mul19 = mul i64 %conv18, 4
%call20 = call noalias i8* @malloc(i64 %mul19) #3
%23 = bitcast i8* %call20 to i32*
store i32* %23, i32** %cindex2, align 8
%24 = load i32*, i32** %sourceData, align 8
%25 = bitcast i32* %24 to i8*
%26 = load i32, i32* %mem_size, align 4
%conv21 = zext i32 %26 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %25, i8 0, i64 %conv21, i1 false)
%27 = load i32*, i32** %destData, align 8
%28 = bitcast i32* %27 to i8*
%29 = load i32, i32* %mem_size, align 4
%conv22 = zext i32 %29 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %28, i8 0, i64 %conv22, i1 false)
%30 = load i32*, i32** %crefData, align 8
%31 = bitcast i32* %30 to i8*
%32 = load i32, i32* %mem_size, align 4
%conv23 = zext i32 %32 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %31, i8 0, i64 %conv23, i1 false)
%33 = load i32*, i32** %cw32, align 8
%34 = bitcast i32* %33 to i8*
%35 = load i32, i32* %mem_size, align 4
%conv24 = zext i32 %35 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %34, i8 0, i64 %conv24, i1 false)
%36 = load i32*, i32** %cw32len, align 8
%37 = bitcast i32* %36 to i8*
%38 = load i32, i32* %mem_size, align 4
%conv25 = zext i32 %38 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %37, i8 0, i64 %conv25, i1 false)
%39 = load i32*, i32** %cw32idx, align 8
%40 = bitcast i32* %39 to i8*
%41 = load i32, i32* %mem_size, align 4
%conv26 = zext i32 %41 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %40, i8 0, i64 %conv26, i1 false)
%42 = load i32*, i32** %codewords, align 8
%43 = bitcast i32* %42 to i8*
%44 = load i32, i32* %symbol_type_size, align 4
%mul27 = mul i32 256, %44
%conv28 = zext i32 %mul27 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %43, i8 0, i64 %conv28, i1 false)
%45 = load i32*, i32** %codewordlens, align 8
%46 = bitcast i32* %45 to i8*
%47 = load i32, i32* %symbol_type_size, align 4
%mul29 = mul i32 256, %47
%conv30 = zext i32 %mul29 to i64
call void @llvm.memset.p0i8.i64(i8* align 4 %46, i8 0, i64 %conv30, i1 false)
%48 = load i32*, i32** %cindex2, align 8
%49 = bitcast i32* %48 to i8*
%50 = load i32, i32* %num_blocks.addr, align 4
%conv31 = zext i32 %50 to i64
%mul32 = mul i64 %conv31, 4
call void @llvm.memset.p0i8.i64(i8* align 4 %49, i8 0, i64 %mul32, i1 false)
%51 = load i8*, i8** %file_name.addr, align 8
%52 = load i32*, i32** %sourceData, align 8
%53 = load i32*, i32** %codewords, align 8
%54 = load i32*, i32** %codewordlens, align 8
%55 = load i32, i32* %num_elements, align 4
%56 = load i32, i32* %mem_size, align 4
call void @_Z8loadDataPcPjS0_S0_jjRd(i8* %51, i32* %52, i32* %53, i32* %54, i32 %55, i32 %56, double* dereferenceable(8) %H)
%57 = bitcast i32** %d_sourceData to i8**
%58 = load i32, i32* %mem_size, align 4
%conv33 = zext i32 %58 to i64
%call34 = call i32 @cudaMalloc(i8** %57, i64 %conv33)
store i32 %call34, i32* %err, align 4
%59 = load i32, i32* %err, align 4
%cmp = icmp ne i32 0, %59
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%60 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%61 = load i32, i32* %err, align 4
%call35 = call i8* @cudaGetErrorString(i32 %61)
%call36 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %60, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 107, i8* %call35)
call void @exit(i32 1) #16
unreachable
if.end: ; preds = %entry
%62 = bitcast i32** %d_destData to i8**
%63 = load i32, i32* %mem_size, align 4
%conv38 = zext i32 %63 to i64
%call39 = call i32 @cudaMalloc(i8** %62, i64 %conv38)
store i32 %call39, i32* %err37, align 4
%64 = load i32, i32* %err37, align 4
%cmp40 = icmp ne i32 0, %64
br i1 %cmp40, label %if.then41, label %if.end44
if.then41: ; preds = %if.end
%65 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%66 = load i32, i32* %err37, align 4
%call42 = call i8* @cudaGetErrorString(i32 %66)
%call43 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %65, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 108, i8* %call42)
call void @exit(i32 1) #16
unreachable
if.end44: ; preds = %if.end
%67 = bitcast i32** %d_destDataPacked to i8**
%68 = load i32, i32* %mem_size, align 4
%conv46 = zext i32 %68 to i64
%call47 = call i32 @cudaMalloc(i8** %67, i64 %conv46)
store i32 %call47, i32* %err45, align 4
%69 = load i32, i32* %err45, align 4
%cmp48 = icmp ne i32 0, %69
br i1 %cmp48, label %if.then49, label %if.end52
if.then49: ; preds = %if.end44
%70 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%71 = load i32, i32* %err45, align 4
%call50 = call i8* @cudaGetErrorString(i32 %71)
%call51 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %70, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 109, i8* %call50)
call void @exit(i32 1) #16
unreachable
if.end52: ; preds = %if.end44
%72 = bitcast i32** %d_codewords to i8**
%73 = load i32, i32* %symbol_type_size, align 4
%mul54 = mul i32 256, %73
%conv55 = zext i32 %mul54 to i64
%call56 = call i32 @cudaMalloc(i8** %72, i64 %conv55)
store i32 %call56, i32* %err53, align 4
%74 = load i32, i32* %err53, align 4
%cmp57 = icmp ne i32 0, %74
br i1 %cmp57, label %if.then58, label %if.end61
if.then58: ; preds = %if.end52
%75 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%76 = load i32, i32* %err53, align 4
%call59 = call i8* @cudaGetErrorString(i32 %76)
%call60 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %75, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 112, i8* %call59)
call void @exit(i32 1) #16
unreachable
if.end61: ; preds = %if.end52
%77 = bitcast i32** %d_codewordlens to i8**
%78 = load i32, i32* %symbol_type_size, align 4
%mul63 = mul i32 256, %78
%conv64 = zext i32 %mul63 to i64
%call65 = call i32 @cudaMalloc(i8** %77, i64 %conv64)
store i32 %call65, i32* %err62, align 4
%79 = load i32, i32* %err62, align 4
%cmp66 = icmp ne i32 0, %79
br i1 %cmp66, label %if.then67, label %if.end70
if.then67: ; preds = %if.end61
%80 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%81 = load i32, i32* %err62, align 4
%call68 = call i8* @cudaGetErrorString(i32 %81)
%call69 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %80, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 114, i8* %call68)
call void @exit(i32 1) #16
unreachable
if.end70: ; preds = %if.end61
%82 = bitcast i32** %d_cw32 to i8**
%83 = load i32, i32* %mem_size, align 4
%conv72 = zext i32 %83 to i64
%call73 = call i32 @cudaMalloc(i8** %82, i64 %conv72)
store i32 %call73, i32* %err71, align 4
%84 = load i32, i32* %err71, align 4
%cmp74 = icmp ne i32 0, %84
br i1 %cmp74, label %if.then75, label %if.end78
if.then75: ; preds = %if.end70
%85 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%86 = load i32, i32* %err71, align 4
%call76 = call i8* @cudaGetErrorString(i32 %86)
%call77 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %85, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 116, i8* %call76)
call void @exit(i32 1) #16
unreachable
if.end78: ; preds = %if.end70
%87 = bitcast i32** %d_cw32len to i8**
%88 = load i32, i32* %mem_size, align 4
%conv80 = zext i32 %88 to i64
%call81 = call i32 @cudaMalloc(i8** %87, i64 %conv80)
store i32 %call81, i32* %err79, align 4
%89 = load i32, i32* %err79, align 4
%cmp82 = icmp ne i32 0, %89
br i1 %cmp82, label %if.then83, label %if.end86
if.then83: ; preds = %if.end78
%90 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%91 = load i32, i32* %err79, align 4
%call84 = call i8* @cudaGetErrorString(i32 %91)
%call85 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %90, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 117, i8* %call84)
call void @exit(i32 1) #16
unreachable
if.end86: ; preds = %if.end78
%92 = bitcast i32** %d_cw32idx to i8**
%93 = load i32, i32* %mem_size, align 4
%conv88 = zext i32 %93 to i64
%call89 = call i32 @cudaMalloc(i8** %92, i64 %conv88)
store i32 %call89, i32* %err87, align 4
%94 = load i32, i32* %err87, align 4
%cmp90 = icmp ne i32 0, %94
br i1 %cmp90, label %if.then91, label %if.end94
if.then91: ; preds = %if.end86
%95 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%96 = load i32, i32* %err87, align 4
%call92 = call i8* @cudaGetErrorString(i32 %96)
%call93 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %95, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 118, i8* %call92)
call void @exit(i32 1) #16
unreachable
if.end94: ; preds = %if.end86
%97 = bitcast i32** %d_cindex to i8**
%98 = load i32, i32* %num_blocks.addr, align 4
%conv96 = zext i32 %98 to i64
%mul97 = mul i64 %conv96, 4
%call98 = call i32 @cudaMalloc(i8** %97, i64 %mul97)
store i32 %call98, i32* %err95, align 4
%99 = load i32, i32* %err95, align 4
%cmp99 = icmp ne i32 0, %99
br i1 %cmp99, label %if.then100, label %if.end103
if.then100: ; preds = %if.end94
%100 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%101 = load i32, i32* %err95, align 4
%call101 = call i8* @cudaGetErrorString(i32 %101)
%call102 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %100, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 121, i8* %call101)
call void @exit(i32 1) #16
unreachable
if.end103: ; preds = %if.end94
%102 = bitcast i32** %d_cindex2 to i8**
%103 = load i32, i32* %num_blocks.addr, align 4
%conv105 = zext i32 %103 to i64
%mul106 = mul i64 %conv105, 4
%call107 = call i32 @cudaMalloc(i8** %102, i64 %mul106)
store i32 %call107, i32* %err104, align 4
%104 = load i32, i32* %err104, align 4
%cmp108 = icmp ne i32 0, %104
br i1 %cmp108, label %if.then109, label %if.end112
if.then109: ; preds = %if.end103
%105 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%106 = load i32, i32* %err104, align 4
%call110 = call i8* @cudaGetErrorString(i32 %106)
%call111 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %105, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 123, i8* %call110)
call void @exit(i32 1) #16
unreachable
if.end112: ; preds = %if.end103
%107 = load i32*, i32** %d_sourceData, align 8
%108 = bitcast i32* %107 to i8*
%109 = load i32*, i32** %sourceData, align 8
%110 = bitcast i32* %109 to i8*
%111 = load i32, i32* %mem_size, align 4
%conv114 = zext i32 %111 to i64
%call115 = call i32 @cudaMemcpy(i8* %108, i8* %110, i64 %conv114, i32 1)
store i32 %call115, i32* %err113, align 4
%112 = load i32, i32* %err113, align 4
%cmp116 = icmp ne i32 0, %112
br i1 %cmp116, label %if.then117, label %if.end120
if.then117: ; preds = %if.end112
%113 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%114 = load i32, i32* %err113, align 4
%call118 = call i8* @cudaGetErrorString(i32 %114)
%call119 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %113, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 141, i8* %call118)
call void @exit(i32 1) #16
unreachable
if.end120: ; preds = %if.end112
%115 = load i32*, i32** %d_codewords, align 8
%116 = bitcast i32* %115 to i8*
%117 = load i32*, i32** %codewords, align 8
%118 = bitcast i32* %117 to i8*
%119 = load i32, i32* %symbol_type_size, align 4
%mul122 = mul i32 256, %119
%conv123 = zext i32 %mul122 to i64
%call124 = call i32 @cudaMemcpy(i8* %116, i8* %118, i64 %conv123, i32 1)
store i32 %call124, i32* %err121, align 4
%120 = load i32, i32* %err121, align 4
%cmp125 = icmp ne i32 0, %120
br i1 %cmp125, label %if.then126, label %if.end129
if.then126: ; preds = %if.end120
%121 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%122 = load i32, i32* %err121, align 4
%call127 = call i8* @cudaGetErrorString(i32 %122)
%call128 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %121, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 144, i8* %call127)
call void @exit(i32 1) #16
unreachable
if.end129: ; preds = %if.end120
%123 = load i32*, i32** %d_codewordlens, align 8
%124 = bitcast i32* %123 to i8*
%125 = load i32*, i32** %codewordlens, align 8
%126 = bitcast i32* %125 to i8*
%127 = load i32, i32* %symbol_type_size, align 4
%mul131 = mul i32 256, %127
%conv132 = zext i32 %mul131 to i64
%call133 = call i32 @cudaMemcpy(i8* %124, i8* %126, i64 %conv132, i32 1)
store i32 %call133, i32* %err130, align 4
%128 = load i32, i32* %err130, align 4
%cmp134 = icmp ne i32 0, %128
br i1 %cmp134, label %if.then135, label %if.end138
if.then135: ; preds = %if.end129
%129 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%130 = load i32, i32* %err130, align 4
%call136 = call i8* @cudaGetErrorString(i32 %130)
%call137 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %129, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 147, i8* %call136)
call void @exit(i32 1) #16
unreachable
if.end138: ; preds = %if.end129
%131 = load i32*, i32** %d_destData, align 8
%132 = bitcast i32* %131 to i8*
%133 = load i32*, i32** %destData, align 8
%134 = bitcast i32* %133 to i8*
%135 = load i32, i32* %mem_size, align 4
%conv140 = zext i32 %135 to i64
%call141 = call i32 @cudaMemcpy(i8* %132, i8* %134, i64 %conv140, i32 1)
store i32 %call141, i32* %err139, align 4
%136 = load i32, i32* %err139, align 4
%cmp142 = icmp ne i32 0, %136
br i1 %cmp142, label %if.then143, label %if.end146
if.then143: ; preds = %if.end138
%137 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%138 = load i32, i32* %err139, align 4
%call144 = call i8* @cudaGetErrorString(i32 %138)
%call145 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %137, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 149, i8* %call144)
call void @exit(i32 1) #16
unreachable
if.end146: ; preds = %if.end138
%139 = load i32, i32* %num_blocks.addr, align 4
call void @_ZN4dim3C2Ejjj(%struct.dim3* %grid_size, i32 %139, i32 1, i32 1)
%140 = load i32, i32* %num_block_threads.addr, align 4
call void @_ZN4dim3C2Ejjj(%struct.dim3* %block_size, i32 %140, i32 1, i32 1)
store i32 10, i32* %NT, align 4
%call147 = call i64 @_Z8get_timev()
store i64 %call147, i64* %timer, align 8
%141 = load i32*, i32** %sourceData, align 8
%142 = load i32, i32* %num_elements, align 4
%143 = load i32*, i32** %crefData, align 8
%144 = load i32*, i32** %codewords, align 8
%145 = load i32*, i32** %codewordlens, align 8
call void @cpu_vlc_encode(i32* %141, i32 %142, i32* %143, i32* %refbytesize, i32* %144, i32* %145)
%call148 = call i64 @_Z8get_timev()
%146 = load i64, i64* %timer, align 8
%sub = sub nsw i64 %call148, %146
%conv149 = sitofp i64 %sub to double
%div = fdiv double %conv149, 1.000000e+03
%conv150 = fptrunc double %div to float
store float %conv150, float* %msec, align 4
%147 = load float, float* %msec, align 4
%conv151 = fpext float %147 to double
%call152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.8, i64 0, i64 0), double %conv151)
%148 = load i32, i32* %refbytesize, align 4
%call153 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.9, i64 0, i64 0), i32 %148)
%149 = load i32, i32* %refbytesize, align 4
%div154 = udiv i32 %149, 4
%150 = load i32, i32* %refbytesize, align 4
%rem = urem i32 %150, 4
%cmp155 = icmp eq i32 %rem, 0
%151 = zext i1 %cmp155 to i64
%cond = select i1 %cmp155, i32 0, i32 1
%add = add i32 %div154, %cond
store i32 %add, i32* %num_ints, align 4
%152 = load i32, i32* %num_blocks.addr, align 4
%x = getelementptr inbounds %struct.dim3, %struct.dim3* %grid_size, i32 0, i32 0
store i32 %152, i32* %x, align 4
%153 = load i32, i32* %num_block_threads.addr, align 4
%x156 = getelementptr inbounds %struct.dim3, %struct.dim3* %block_size, i32 0, i32 0
store i32 %153, i32* %x156, align 4
%x157 = getelementptr inbounds %struct.dim3, %struct.dim3* %block_size, i32 0, i32 0
%154 = load i32, i32* %x157, align 4
%conv158 = zext i32 %154 to i64
%mul159 = mul i64 %conv158, 4
%conv160 = trunc i64 %mul159 to i32
store i32 %conv160, i32* %sm_size, align 4
%x161 = getelementptr inbounds %struct.dim3, %struct.dim3* %block_size, i32 0, i32 0
%155 = load i32, i32* %x161, align 4
%conv162 = zext i32 %155 to i64
%mul163 = mul i64 %conv162, 4
%add164 = add i64 2048, %mul163
%conv165 = trunc i64 %add164 to i32
store i32 %conv165, i32* %sm_size, align 4
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %if.end146
%156 = load i32, i32* %i, align 4
%157 = load i32, i32* %NT, align 4
%cmp166 = icmp ult i32 %156, %157
br i1 %cmp166, label %for.body, label %for.end
for.body: ; preds = %for.cond
%158 = bitcast %struct.dim3* %agg.tmp to i8*
%159 = bitcast %struct.dim3* %grid_size to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %158, i8* align 4 %159, i64 12, i1 false)
%160 = bitcast %struct.dim3* %agg.tmp167 to i8*
%161 = bitcast %struct.dim3* %block_size to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %160, i8* align 4 %161, i64 12, i1 false)
%162 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
%163 = bitcast %struct.dim3* %agg.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %162, i8* align 4 %163, i64 12, i1 false)
%164 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
%165 = load i64, i64* %164, align 4
%166 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
%167 = load i32, i32* %166, align 4
%168 = bitcast { i64, i32 }* %agg.tmp167.coerce to i8*
%169 = bitcast %struct.dim3* %agg.tmp167 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %168, i8* align 4 %169, i64 12, i1 false)
%170 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp167.coerce, i32 0, i32 0
%171 = load i64, i64* %170, align 4
%172 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp167.coerce, i32 0, i32 1
%173 = load i32, i32* %172, align 4
%call168 = call i32 @__cudaPushCallConfiguration(i64 %165, i32 %167, i64 %171, i32 %173, i64 0, i8* null)
%tobool = icmp ne i32 %call168, 0
br i1 %tobool, label %kcall.end, label %kcall.configok
kcall.configok: ; preds = %for.body
%174 = load i32*, i32** %d_sourceData, align 8
%175 = load i32*, i32** %d_codewords, align 8
%176 = load i32*, i32** %d_codewordlens, align 8
%177 = load i32*, i32** %d_cw32, align 8
%178 = load i32*, i32** %d_cw32len, align 8
%179 = load i32*, i32** %d_cw32idx, align 8
%180 = load i32*, i32** %d_destData, align 8
%181 = load i32*, i32** %d_cindex, align 8
call void @_ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_(i32* %174, i32* %175, i32* %176, i32* %177, i32* %178, i32* %179, i32* %180, i32* %181)
br label %kcall.end
kcall.end: ; preds = %kcall.configok, %for.body
%call169 = call i32 @cudaThreadSynchronize()
br label %for.inc
for.inc: ; preds = %kcall.end
%182 = load i32, i32* %i, align 4
%inc = add nsw i32 %182, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
%x170 = getelementptr inbounds %struct.dim3, %struct.dim3* %grid_size, i32 0, i32 0
%183 = load i32, i32* %x170, align 4
store i32 %183, i32* %num_scan_elements, align 4
%184 = load i32, i32* %num_scan_elements, align 4
call void @_ZL17preallocBlockSumsj(i32 %184)
%185 = load i32*, i32** %d_destDataPacked, align 8
%186 = bitcast i32* %185 to i8*
%187 = load i32, i32* %mem_size, align 4
%conv171 = zext i32 %187 to i64
%call172 = call i32 @cudaMemset(i8* %186, i32 0, i64 %conv171)
%188 = load i32, i32* %num_scan_elements, align 4
%call173 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.10, i64 0, i64 0), i32 %188)
%189 = load i32*, i32** %d_cindex2, align 8
%190 = load i32*, i32** %d_cindex, align 8
%191 = load i32, i32* %num_scan_elements, align 4
call void @_ZL12prescanArrayPjS_i(i32* %189, i32* %190, i32 %191)
%192 = load i32, i32* %num_scan_elements, align 4
%div175 = udiv i32 %192, 32
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp174, i32 %div175, i32 1, i32 1)
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp176, i32 32, i32 1, i32 1)
%193 = bitcast { i64, i32 }* %agg.tmp174.coerce to i8*
%194 = bitcast %struct.dim3* %agg.tmp174 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %193, i8* align 4 %194, i64 12, i1 false)
%195 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp174.coerce, i32 0, i32 0
%196 = load i64, i64* %195, align 4
%197 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp174.coerce, i32 0, i32 1
%198 = load i32, i32* %197, align 4
%199 = bitcast { i64, i32 }* %agg.tmp176.coerce to i8*
%200 = bitcast %struct.dim3* %agg.tmp176 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %199, i8* align 4 %200, i64 12, i1 false)
%201 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp176.coerce, i32 0, i32 0
%202 = load i64, i64* %201, align 4
%203 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp176.coerce, i32 0, i32 1
%204 = load i32, i32* %203, align 4
%call177 = call i32 @__cudaPushCallConfiguration(i64 %196, i32 %198, i64 %202, i32 %204, i64 0, i8* null)
%tobool178 = icmp ne i32 %call177, 0
br i1 %tobool178, label %kcall.end181, label %kcall.configok179
kcall.configok179: ; preds = %for.end
%205 = load i32*, i32** %d_destData, align 8
%206 = load i32*, i32** %d_cindex, align 8
%207 = load i32*, i32** %d_cindex2, align 8
%208 = load i32*, i32** %d_destDataPacked, align 8
%209 = load i32, i32* %num_elements, align 4
%210 = load i32, i32* %num_scan_elements, align 4
%div180 = udiv i32 %209, %210
call void @_ZL5pack2PjS_S_S_j(i32* %205, i32* %206, i32* %207, i32* %208, i32 %div180)
br label %kcall.end181
kcall.end181: ; preds = %kcall.configok179, %for.end
%call182 = call i32 @cudaThreadSynchronize()
%call184 = call i32 @cudaGetLastError()
store i32 %call184, i32* %err183, align 4
%211 = load i32, i32* %err183, align 4
%cmp185 = icmp ne i32 0, %211
br i1 %cmp185, label %if.then186, label %if.end189
if.then186: ; preds = %kcall.end181
%212 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%213 = load i32, i32* %err183, align 4
%call187 = call i8* @cudaGetErrorString(i32 %213)
%call188 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %212, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.12, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 198, i8* %call187)
call void @exit(i32 1) #16
unreachable
if.end189: ; preds = %kcall.end181
call void @_ZL16deallocBlockSumsv()
%214 = load i32*, i32** %destData, align 8
%215 = bitcast i32* %214 to i8*
%216 = load i32*, i32** %d_destDataPacked, align 8
%217 = bitcast i32* %216 to i8*
%218 = load i32, i32* %mem_size, align 4
%conv191 = zext i32 %218 to i64
%call192 = call i32 @cudaMemcpy(i8* %215, i8* %217, i64 %conv191, i32 2)
store i32 %call192, i32* %err190, align 4
%219 = load i32, i32* %err190, align 4
%cmp193 = icmp ne i32 0, %219
br i1 %cmp193, label %if.then194, label %if.end197
if.then194: ; preds = %if.end189
%220 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%221 = load i32, i32* %err190, align 4
%call195 = call i8* @cudaGetErrorString(i32 %221)
%call196 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %220, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 203, i8* %call195)
call void @exit(i32 1) #16
unreachable
if.end197: ; preds = %if.end189
%222 = load i32*, i32** %crefData, align 8
%223 = load i32*, i32** %destData, align 8
%224 = load i32, i32* %num_ints, align 4
%call198 = call i32 @_Z15compare_vectorsIjEiPT_S1_j(i32* %222, i32* %223, i32 %224)
%225 = load i32*, i32** %sourceData, align 8
%226 = bitcast i32* %225 to i8*
call void @free(i8* %226) #3
%227 = load i32*, i32** %destData, align 8
%228 = bitcast i32* %227 to i8*
call void @free(i8* %228) #3
%229 = load i32*, i32** %codewords, align 8
%230 = bitcast i32* %229 to i8*
call void @free(i8* %230) #3
%231 = load i32*, i32** %codewordlens, align 8
%232 = bitcast i32* %231 to i8*
call void @free(i8* %232) #3
%233 = load i32*, i32** %cw32, align 8
%234 = bitcast i32* %233 to i8*
call void @free(i8* %234) #3
%235 = load i32*, i32** %cw32len, align 8
%236 = bitcast i32* %235 to i8*
call void @free(i8* %236) #3
%237 = load i32*, i32** %crefData, align 8
%238 = bitcast i32* %237 to i8*
call void @free(i8* %238) #3
%239 = load i32*, i32** %d_sourceData, align 8
%240 = bitcast i32* %239 to i8*
%call200 = call i32 @cudaFree(i8* %240)
store i32 %call200, i32* %err199, align 4
%241 = load i32, i32* %err199, align 4
%cmp201 = icmp ne i32 0, %241
br i1 %cmp201, label %if.then202, label %if.end205
if.then202: ; preds = %if.end197
%242 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%243 = load i32, i32* %err199, align 4
%call203 = call i8* @cudaGetErrorString(i32 %243)
%call204 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %242, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 214, i8* %call203)
call void @exit(i32 1) #16
unreachable
if.end205: ; preds = %if.end197
%244 = load i32*, i32** %d_destData, align 8
%245 = bitcast i32* %244 to i8*
%call207 = call i32 @cudaFree(i8* %245)
store i32 %call207, i32* %err206, align 4
%246 = load i32, i32* %err206, align 4
%cmp208 = icmp ne i32 0, %246
br i1 %cmp208, label %if.then209, label %if.end212
if.then209: ; preds = %if.end205
%247 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%248 = load i32, i32* %err206, align 4
%call210 = call i8* @cudaGetErrorString(i32 %248)
%call211 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %247, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 215, i8* %call210)
call void @exit(i32 1) #16
unreachable
if.end212: ; preds = %if.end205
%249 = load i32*, i32** %d_destDataPacked, align 8
%250 = bitcast i32* %249 to i8*
%call214 = call i32 @cudaFree(i8* %250)
store i32 %call214, i32* %err213, align 4
%251 = load i32, i32* %err213, align 4
%cmp215 = icmp ne i32 0, %251
br i1 %cmp215, label %if.then216, label %if.end219
if.then216: ; preds = %if.end212
%252 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%253 = load i32, i32* %err213, align 4
%call217 = call i8* @cudaGetErrorString(i32 %253)
%call218 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %252, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 216, i8* %call217)
call void @exit(i32 1) #16
unreachable
if.end219: ; preds = %if.end212
%254 = load i32*, i32** %d_codewords, align 8
%255 = bitcast i32* %254 to i8*
%call221 = call i32 @cudaFree(i8* %255)
store i32 %call221, i32* %err220, align 4
%256 = load i32, i32* %err220, align 4
%cmp222 = icmp ne i32 0, %256
br i1 %cmp222, label %if.then223, label %if.end226
if.then223: ; preds = %if.end219
%257 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%258 = load i32, i32* %err220, align 4
%call224 = call i8* @cudaGetErrorString(i32 %258)
%call225 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %257, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 217, i8* %call224)
call void @exit(i32 1) #16
unreachable
if.end226: ; preds = %if.end219
%259 = load i32*, i32** %d_codewordlens, align 8
%260 = bitcast i32* %259 to i8*
%call228 = call i32 @cudaFree(i8* %260)
store i32 %call228, i32* %err227, align 4
%261 = load i32, i32* %err227, align 4
%cmp229 = icmp ne i32 0, %261
br i1 %cmp229, label %if.then230, label %if.end233
if.then230: ; preds = %if.end226
%262 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%263 = load i32, i32* %err227, align 4
%call231 = call i8* @cudaGetErrorString(i32 %263)
%call232 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %262, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 218, i8* %call231)
call void @exit(i32 1) #16
unreachable
if.end233: ; preds = %if.end226
%264 = load i32*, i32** %d_cw32, align 8
%265 = bitcast i32* %264 to i8*
%call235 = call i32 @cudaFree(i8* %265)
store i32 %call235, i32* %err234, align 4
%266 = load i32, i32* %err234, align 4
%cmp236 = icmp ne i32 0, %266
br i1 %cmp236, label %if.then237, label %if.end240
if.then237: ; preds = %if.end233
%267 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%268 = load i32, i32* %err234, align 4
%call238 = call i8* @cudaGetErrorString(i32 %268)
%call239 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %267, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 219, i8* %call238)
call void @exit(i32 1) #16
unreachable
if.end240: ; preds = %if.end233
%269 = load i32*, i32** %d_cw32len, align 8
%270 = bitcast i32* %269 to i8*
%call242 = call i32 @cudaFree(i8* %270)
store i32 %call242, i32* %err241, align 4
%271 = load i32, i32* %err241, align 4
%cmp243 = icmp ne i32 0, %271
br i1 %cmp243, label %if.then244, label %if.end247
if.then244: ; preds = %if.end240
%272 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%273 = load i32, i32* %err241, align 4
%call245 = call i8* @cudaGetErrorString(i32 %273)
%call246 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %272, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 220, i8* %call245)
call void @exit(i32 1) #16
unreachable
if.end247: ; preds = %if.end240
%274 = load i32*, i32** %d_cw32idx, align 8
%275 = bitcast i32* %274 to i8*
%call249 = call i32 @cudaFree(i8* %275)
store i32 %call249, i32* %err248, align 4
%276 = load i32, i32* %err248, align 4
%cmp250 = icmp ne i32 0, %276
br i1 %cmp250, label %if.then251, label %if.end254
if.then251: ; preds = %if.end247
%277 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%278 = load i32, i32* %err248, align 4
%call252 = call i8* @cudaGetErrorString(i32 %278)
%call253 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %277, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 221, i8* %call252)
call void @exit(i32 1) #16
unreachable
if.end254: ; preds = %if.end247
%279 = load i32*, i32** %d_cindex, align 8
%280 = bitcast i32* %279 to i8*
%call256 = call i32 @cudaFree(i8* %280)
store i32 %call256, i32* %err255, align 4
%281 = load i32, i32* %err255, align 4
%cmp257 = icmp ne i32 0, %281
br i1 %cmp257, label %if.then258, label %if.end261
if.then258: ; preds = %if.end254
%282 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%283 = load i32, i32* %err255, align 4
%call259 = call i8* @cudaGetErrorString(i32 %283)
%call260 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %282, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 222, i8* %call259)
call void @exit(i32 1) #16
unreachable
if.end261: ; preds = %if.end254
%284 = load i32*, i32** %d_cindex2, align 8
%285 = bitcast i32* %284 to i8*
%call263 = call i32 @cudaFree(i8* %285)
store i32 %call263, i32* %err262, align 4
%286 = load i32, i32* %err262, align 4
%cmp264 = icmp ne i32 0, %286
br i1 %cmp264, label %if.then265, label %if.end268
if.then265: ; preds = %if.end261
%287 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%288 = load i32, i32* %err262, align 4
%call266 = call i8* @cudaGetErrorString(i32 %288)
%call267 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %287, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 223, i8* %call266)
call void @exit(i32 1) #16
unreachable
if.end268: ; preds = %if.end261
%289 = load i32*, i32** %cindex2, align 8
%290 = bitcast i32* %289 to i8*
call void @free(i8* %290) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_Z10initParamsPcjRjS0_S0_j(i8* %file_name, i32 %num_block_threads, i32* dereferenceable(4) %num_blocks, i32* dereferenceable(4) %num_elements, i32* dereferenceable(4) %mem_size, i32 %symbol_type_size) #0 comdat {
entry:
%file_name.addr = alloca i8*, align 8
%num_block_threads.addr = alloca i32, align 4
%num_blocks.addr = alloca i32*, align 8
%num_elements.addr = alloca i32*, align 8
%mem_size.addr = alloca i32*, align 8
%symbol_type_size.addr = alloca i32, align 4
%f = alloca %struct._IO_FILE*, align 8
store i8* %file_name, i8** %file_name.addr, align 8
store i32 %num_block_threads, i32* %num_block_threads.addr, align 4
store i32* %num_blocks, i32** %num_blocks.addr, align 8
store i32* %num_elements, i32** %num_elements.addr, align 8
store i32* %mem_size, i32** %mem_size.addr, align 8
store i32 %symbol_type_size, i32* %symbol_type_size.addr, align 4
%0 = load i8*, i8** %file_name.addr, align 8
%cmp = icmp eq i8* %0, null
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%1 = load i32*, i32** %num_blocks.addr, align 8
%2 = load i32, i32* %1, align 4
%3 = load i32, i32* %num_block_threads.addr, align 4
%mul = mul i32 %2, %3
%4 = load i32*, i32** %num_elements.addr, align 8
store i32 %mul, i32* %4, align 4
%5 = load i32*, i32** %num_elements.addr, align 8
%6 = load i32, i32* %5, align 4
%7 = load i32, i32* %symbol_type_size.addr, align 4
%mul1 = mul i32 %6, %7
%8 = load i32*, i32** %mem_size.addr, align 8
store i32 %mul1, i32* %8, align 4
br label %if.end7
if.else: ; preds = %entry
%9 = load i8*, i8** %file_name.addr, align 8
%call = call %struct._IO_FILE* @fopen(i8* %9, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
store %struct._IO_FILE* %call, %struct._IO_FILE** %f, align 8
%10 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%tobool = icmp ne %struct._IO_FILE* %10, null
br i1 %tobool, label %if.end, label %if.then2
if.then2: ; preds = %if.else
%11 = load i8*, i8** %file_name.addr, align 8
call void @perror(i8* %11)
call void @exit(i32 1) #16
unreachable
if.end: ; preds = %if.else
%12 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call3 = call i32 @fseek(%struct._IO_FILE* %12, i64 0, i32 2)
%13 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call4 = call i64 @ftell(%struct._IO_FILE* %13)
%conv = trunc i64 %call4 to i32
%14 = load i32*, i32** %mem_size.addr, align 8
store i32 %conv, i32* %14, align 4
%15 = load %struct._IO_FILE*, %struct._IO_FILE** %f, align 8
%call5 = call i32 @fclose(%struct._IO_FILE* %15)
%16 = load i32*, i32** %mem_size.addr, align 8
%17 = load i32, i32* %16, align 4
%18 = load i32, i32* %symbol_type_size.addr, align 4
%div = udiv i32 %17, %18
%19 = load i32*, i32** %num_elements.addr, align 8
store i32 %div, i32* %19, align 4
%20 = load i32*, i32** %num_elements.addr, align 8
%21 = load i32, i32* %20, align 4
%22 = load i32, i32* %num_block_threads.addr, align 4
%div6 = udiv i32 %21, %22
%23 = load i32*, i32** %num_blocks.addr, align 8
store i32 %div6, i32* %23, align 4
br label %if.end7
if.end7: ; preds = %if.end, %if.then
ret void
}
; Function Attrs: nounwind
declare dso_local noalias i8* @malloc(i64) #11
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #4
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_Z8loadDataPcPjS0_S0_jjRd(i8* %file_name, i32* %sourceData, i32* %codewords, i32* %codewordlens, i32 %num_elements, i32 %mem_size, double* dereferenceable(8) %H) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%file_name.addr = alloca i8*, align 8
%sourceData.addr = alloca i32*, align 8
%codewords.addr = alloca i32*, align 8
%codewordlens.addr = alloca i32*, align 8
%num_elements.addr = alloca i32, align 4
%mem_size.addr = alloca i32, align 4
%H.addr = alloca double*, align 8
%freqs = alloca [256 x i32], align 16
%root = alloca %class.INode*, align 8
%codes = alloca %"class.std::map", align 8
%ref.tmp = alloca %"class.std::vector.0", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%it = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%ref.tmp8 = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp12 = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%ref.tmp13 = alloca %"struct.std::_Rb_tree_iterator", align 8
%count = alloca i32, align 4
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp24 = alloca %"struct.std::_Bit_const_iterator", align 8
%i = alloca i32, align 4
%i59 = alloca i32, align 4
%p = alloca double, align 8
store i8* %file_name, i8** %file_name.addr, align 8
store i32* %sourceData, i32** %sourceData.addr, align 8
store i32* %codewords, i32** %codewords.addr, align 8
store i32* %codewordlens, i32** %codewordlens.addr, align 8
store i32 %num_elements, i32* %num_elements.addr, align 4
store i32 %mem_size, i32* %mem_size.addr, align 4
store double* %H, double** %H.addr, align 8
%0 = load i8*, i8** %file_name.addr, align 8
%cmp = icmp eq i8* %0, null
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.14, i64 0, i64 0))
call void @exit(i32 -1) #16
unreachable
if.else: ; preds = %entry
%1 = bitcast [256 x i32]* %freqs to i8*
call void @llvm.memset.p0i8.i64(i8* align 16 %1, i8 0, i64 1024, i1 false)
%2 = load i8*, i8** %file_name.addr, align 8
%arraydecay = getelementptr inbounds [256 x i32], [256 x i32]* %freqs, i64 0, i64 0
%3 = load i32, i32* %mem_size.addr, align 4
%4 = load i32*, i32** %sourceData.addr, align 8
%call1 = call i32 @_Z8runHistoPcPjjS0_(i8* %2, i32* %arraydecay, i32 %3, i32* %4)
%call2 = call %class.INode* @_Z9BuildTreeRA256_j([256 x i32]* dereferenceable(1024) %freqs)
store %class.INode* %call2, %class.INode** %root, align 8
call void @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEC2Ev(%"class.std::map"* %codes)
%5 = load %class.INode*, %class.INode** %root, align 8
invoke void @_ZNSt6vectorIbSaIbEEC2Ev(%"class.std::vector.0"* %ref.tmp)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %if.else
invoke void @_Z13GenerateCodesPK5INodeRKSt6vectorIbSaIbEERSt3mapIhS4_St4lessIhESaISt4pairIKhS4_EEE(%class.INode* %5, %"class.std::vector.0"* dereferenceable(40) %ref.tmp, %"class.std::map"* dereferenceable(48) %codes)
to label %invoke.cont4 unwind label %lpad3
invoke.cont4: ; preds = %invoke.cont
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %ref.tmp)
to label %invoke.cont5 unwind label %lpad
invoke.cont5: ; preds = %invoke.cont4
%6 = load %class.INode*, %class.INode** %root, align 8
%isnull = icmp eq %class.INode* %6, null
br i1 %isnull, label %delete.end, label %delete.notnull
delete.notnull: ; preds = %invoke.cont5
%7 = bitcast %class.INode* %6 to void (%class.INode*)***
%vtable = load void (%class.INode*)**, void (%class.INode*)*** %7, align 8
%vfn = getelementptr inbounds void (%class.INode*)*, void (%class.INode*)** %vtable, i64 1
%8 = load void (%class.INode*)*, void (%class.INode*)** %vfn, align 8
invoke void %8(%class.INode* %6)
to label %invoke.cont7 unwind label %lpad
invoke.cont7: ; preds = %delete.notnull
br label %delete.end
delete.end: ; preds = %invoke.cont7, %invoke.cont5
%call10 = invoke %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE5beginEv(%"class.std::map"* %codes)
to label %invoke.cont9 unwind label %lpad
invoke.cont9: ; preds = %delete.end
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %ref.tmp8, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call10, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
invoke void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2ERKSt17_Rb_tree_iteratorIS5_E(%"struct.std::_Rb_tree_const_iterator"* %it, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %ref.tmp8)
to label %invoke.cont11 unwind label %lpad
invoke.cont11: ; preds = %invoke.cont9
br label %for.cond
for.cond: ; preds = %invoke.cont56, %invoke.cont11
%call15 = invoke %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE3endEv(%"class.std::map"* %codes)
to label %invoke.cont14 unwind label %lpad
invoke.cont14: ; preds = %for.cond
%coerce.dive16 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %ref.tmp13, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call15, %"struct.std::_Rb_tree_node_base"** %coerce.dive16, align 8
invoke void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2ERKSt17_Rb_tree_iteratorIS5_E(%"struct.std::_Rb_tree_const_iterator"* %ref.tmp12, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %ref.tmp13)
to label %invoke.cont17 unwind label %lpad
invoke.cont17: ; preds = %invoke.cont14
%call19 = invoke zeroext i1 @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEneERKS6_(%"struct.std::_Rb_tree_const_iterator"* %it, %"struct.std::_Rb_tree_const_iterator"* dereferenceable(8) %ref.tmp12)
to label %invoke.cont18 unwind label %lpad
invoke.cont18: ; preds = %invoke.cont17
br i1 %call19, label %for.body, label %for.end58
for.body: ; preds = %invoke.cont18
%call21 = invoke %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont20 unwind label %lpad
invoke.cont20: ; preds = %for.body
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call21, i32 0, i32 1
%call23 = invoke { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %second)
to label %invoke.cont22 unwind label %lpad
invoke.cont22: ; preds = %invoke.cont20
%9 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%10 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %9, i32 0, i32 0
%11 = extractvalue { i64*, i32 } %call23, 0
store i64* %11, i64** %10, align 8
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %9, i32 0, i32 1
%13 = extractvalue { i64*, i32 } %call23, 1
store i32 %13, i32* %12, align 8
%call26 = invoke %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont25 unwind label %lpad
invoke.cont25: ; preds = %invoke.cont22
%second27 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call26, i32 0, i32 1
%call29 = invoke { i64*, i32 } @_ZNKSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %second27)
to label %invoke.cont28 unwind label %lpad
invoke.cont28: ; preds = %invoke.cont25
%14 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp24 to { i64*, i32 }*
%15 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %14, i32 0, i32 0
%16 = extractvalue { i64*, i32 } %call29, 0
store i64* %16, i64** %15, align 8
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %14, i32 0, i32 1
%18 = extractvalue { i64*, i32 } %call29, 1
store i32 %18, i32* %17, align 8
%19 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%20 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %19, i32 0, i32 0
%21 = load i64*, i64** %20, align 8
%22 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %19, i32 0, i32 1
%23 = load i32, i32* %22, align 8
%24 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp24 to { i64*, i32 }*
%25 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %24, i32 0, i32 0
%26 = load i64*, i64** %25, align 8
%27 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %24, i32 0, i32 1
%28 = load i32, i32* %27, align 8
%call31 = invoke i64 @_ZSt8distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_(i64* %21, i32 %23, i64* %26, i32 %28)
to label %invoke.cont30 unwind label %lpad
invoke.cont30: ; preds = %invoke.cont28
%conv = trunc i64 %call31 to i32
store i32 %conv, i32* %count, align 4
store i32 0, i32* %i, align 4
br label %for.cond32
for.cond32: ; preds = %for.inc, %invoke.cont30
%29 = load i32, i32* %i, align 4
%30 = load i32, i32* %count, align 4
%cmp33 = icmp ult i32 %29, %30
br i1 %cmp33, label %for.body34, label %for.end
for.body34: ; preds = %for.cond32
%call36 = invoke %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont35 unwind label %lpad
invoke.cont35: ; preds = %for.body34
%second37 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call36, i32 0, i32 1
%31 = load i32, i32* %i, align 4
%conv38 = sext i32 %31 to i64
%call40 = invoke zeroext i1 @_ZNKSt6vectorIbSaIbEEixEm(%"class.std::vector.0"* %second37, i64 %conv38)
to label %invoke.cont39 unwind label %lpad
invoke.cont39: ; preds = %invoke.cont35
br i1 %call40, label %if.then41, label %if.end
if.then41: ; preds = %invoke.cont39
%32 = load i32, i32* %count, align 4
%33 = load i32, i32* %i, align 4
%sub = sub nsw i32 %32, %33
%sub42 = sub nsw i32 %sub, 1
%call44 = invoke float @_ZSt3powfi(float 2.000000e+00, i32 %sub42)
to label %invoke.cont43 unwind label %lpad
invoke.cont43: ; preds = %if.then41
%conv45 = fptoui float %call44 to i32
%34 = load i32*, i32** %codewords.addr, align 8
%call47 = invoke %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont46 unwind label %lpad
invoke.cont46: ; preds = %invoke.cont43
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call47, i32 0, i32 0
%35 = load i8, i8* %first, align 8
%conv48 = zext i8 %35 to i32
%idxprom = zext i32 %conv48 to i64
%arrayidx = getelementptr inbounds i32, i32* %34, i64 %idxprom
%36 = load i32, i32* %arrayidx, align 4
%add = add i32 %36, %conv45
store i32 %add, i32* %arrayidx, align 4
br label %if.end
lpad: ; preds = %for.end78, %for.inc55, %for.end, %invoke.cont43, %if.then41, %invoke.cont35, %for.body34, %invoke.cont28, %invoke.cont25, %invoke.cont22, %invoke.cont20, %for.body, %invoke.cont17, %invoke.cont14, %for.cond, %invoke.cont9, %delete.end, %delete.notnull, %invoke.cont4, %if.else
%37 = landingpad { i8*, i32 }
cleanup
%38 = extractvalue { i8*, i32 } %37, 0
store i8* %38, i8** %exn.slot, align 8
%39 = extractvalue { i8*, i32 } %37, 1
store i32 %39, i32* %ehselector.slot, align 4
br label %ehcleanup
lpad3: ; preds = %invoke.cont
%40 = landingpad { i8*, i32 }
cleanup
%41 = extractvalue { i8*, i32 } %40, 0
store i8* %41, i8** %exn.slot, align 8
%42 = extractvalue { i8*, i32 } %40, 1
store i32 %42, i32* %ehselector.slot, align 4
invoke void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %ref.tmp)
to label %invoke.cont6 unwind label %terminate.lpad
invoke.cont6: ; preds = %lpad3
br label %ehcleanup
if.end: ; preds = %invoke.cont46, %invoke.cont39
br label %for.inc
for.inc: ; preds = %if.end
%43 = load i32, i32* %i, align 4
%inc = add nsw i32 %43, 1
store i32 %inc, i32* %i, align 4
br label %for.cond32
for.end: ; preds = %for.cond32
%44 = load i32, i32* %count, align 4
%45 = load i32*, i32** %codewordlens.addr, align 8
%call50 = invoke %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont49 unwind label %lpad
invoke.cont49: ; preds = %for.end
%first51 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %call50, i32 0, i32 0
%46 = load i8, i8* %first51, align 8
%conv52 = zext i8 %46 to i32
%idxprom53 = zext i32 %conv52 to i64
%arrayidx54 = getelementptr inbounds i32, i32* %45, i64 %idxprom53
store i32 %44, i32* %arrayidx54, align 4
br label %for.inc55
for.inc55: ; preds = %invoke.cont49
%call57 = invoke dereferenceable(8) %"struct.std::_Rb_tree_const_iterator"* @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv(%"struct.std::_Rb_tree_const_iterator"* %it)
to label %invoke.cont56 unwind label %lpad
invoke.cont56: ; preds = %for.inc55
br label %for.cond
for.end58: ; preds = %invoke.cont18
%47 = load double*, double** %H.addr, align 8
store double 0.000000e+00, double* %47, align 8
store i32 0, i32* %i59, align 4
br label %for.cond60
for.cond60: ; preds = %for.inc76, %for.end58
%48 = load i32, i32* %i59, align 4
%cmp61 = icmp ult i32 %48, 256
br i1 %cmp61, label %for.body62, label %for.end78
for.body62: ; preds = %for.cond60
%49 = load i32, i32* %i59, align 4
%idxprom63 = zext i32 %49 to i64
%arrayidx64 = getelementptr inbounds [256 x i32], [256 x i32]* %freqs, i64 0, i64 %idxprom63
%50 = load i32, i32* %arrayidx64, align 4
%cmp65 = icmp ugt i32 %50, 0
br i1 %cmp65, label %if.then66, label %if.end75
if.then66: ; preds = %for.body62
%51 = load i32, i32* %i59, align 4
%idxprom67 = zext i32 %51 to i64
%arrayidx68 = getelementptr inbounds [256 x i32], [256 x i32]* %freqs, i64 0, i64 %idxprom67
%52 = load i32, i32* %arrayidx68, align 4
%conv69 = uitofp i32 %52 to double
%53 = load i32, i32* %mem_size.addr, align 4
%conv70 = uitofp i32 %53 to double
%div = fdiv double %conv69, %conv70
store double %div, double* %p, align 8
%54 = load double, double* %p, align 8
%55 = load double, double* %p, align 8
%call71 = call double @log(double %55) #3
%mul = fmul contract double %54, %call71
%call72 = call double @log(double 2.000000e+00) #3
%div73 = fdiv double %mul, %call72
%56 = load double*, double** %H.addr, align 8
%57 = load double, double* %56, align 8
%add74 = fadd contract double %57, %div73
store double %add74, double* %56, align 8
br label %if.end75
if.end75: ; preds = %if.then66, %for.body62
br label %for.inc76
for.inc76: ; preds = %if.end75
%58 = load i32, i32* %i59, align 4
%inc77 = add i32 %58, 1
store i32 %inc77, i32* %i59, align 4
br label %for.cond60
for.end78: ; preds = %for.cond60
%59 = load double*, double** %H.addr, align 8
%60 = load double, double* %59, align 8
%fneg = fneg double %60
%61 = load double*, double** %H.addr, align 8
store double %fneg, double* %61, align 8
%62 = load i8*, i8** %file_name.addr, align 8
%63 = load i32, i32* %mem_size.addr, align 4
%64 = load double*, double** %H.addr, align 8
%65 = load double, double* %64, align 8
%call80 = invoke i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.15, i64 0, i64 0), i8* %62, i32 %63, double %65)
to label %invoke.cont79 unwind label %lpad
invoke.cont79: ; preds = %for.end78
call void @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEED2Ev(%"class.std::map"* %codes)
br label %if.end82
ehcleanup: ; preds = %invoke.cont6, %lpad
invoke void @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEED2Ev(%"class.std::map"* %codes)
to label %invoke.cont81 unwind label %terminate.lpad
invoke.cont81: ; preds = %ehcleanup
br label %eh.resume
if.end82: ; preds = %invoke.cont79
ret void
eh.resume: ; preds = %invoke.cont81
%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.val83 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val83
terminate.lpad: ; preds = %ehcleanup, %lpad3
%66 = landingpad { i8*, i32 }
catch i8* null
%67 = extractvalue { i8*, i32 } %66, 0
call void @__clang_call_terminate(i8* %67) #16
unreachable
}
declare dso_local i32 @fprintf(%struct._IO_FILE*, i8*, ...) #1
declare dso_local i8* @cudaGetErrorString(i32) #1
declare dso_local void @cpu_vlc_encode(i32*, i32, i32*, i32*, i32*, i32*) #1
; Function Attrs: noinline optnone uwtable
define internal void @_ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_(i32* %data, i32* %gm_codewords, i32* %gm_codewordlens, i32* %cw32, i32* %cw32len, i32* %cw32idx, i32* %out, i32* %outidx) #0 {
entry:
%data.addr = alloca i32*, align 8
%gm_codewords.addr = alloca i32*, align 8
%gm_codewordlens.addr = alloca i32*, align 8
%cw32.addr = alloca i32*, align 8
%cw32len.addr = alloca i32*, align 8
%cw32idx.addr = alloca i32*, align 8
%out.addr = alloca i32*, align 8
%outidx.addr = alloca i32*, align 8
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %data, i32** %data.addr, align 8
store i32* %gm_codewords, i32** %gm_codewords.addr, align 8
store i32* %gm_codewordlens, i32** %gm_codewordlens.addr, align 8
store i32* %cw32, i32** %cw32.addr, align 8
store i32* %cw32len, i32** %cw32len.addr, align 8
store i32* %cw32idx, i32** %cw32idx.addr, align 8
store i32* %out, i32** %out.addr, align 8
store i32* %outidx, i32** %outidx.addr, align 8
%kernel_args = alloca i8*, i64 8, align 16
%0 = bitcast i32** %data.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %gm_codewords.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %gm_codewordlens.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32** %cw32.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32** %cw32len.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = bitcast i32** %cw32idx.addr to i8*
%11 = getelementptr i8*, i8** %kernel_args, i32 5
store i8* %10, i8** %11
%12 = bitcast i32** %out.addr to i8*
%13 = getelementptr i8*, i8** %kernel_args, i32 6
store i8* %12, i8** %13
%14 = bitcast i32** %outidx.addr to i8*
%15 = getelementptr i8*, i8** %kernel_args, i32 7
store i8* %14, i8** %15
%16 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%17 = load i64, i64* %shmem_size, align 8
%18 = load i8*, i8** %stream, align 8
%19 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%20 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %19, i8* align 8 %20, i64 12, i1 false)
%21 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%22 = load i64, i64* %21, align 8
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%26 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %25, i8* align 8 %26, i64 12, i1 false)
%27 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%28 = load i64, i64* %27, align 8
%29 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%30 = load i32, i32* %29, align 8
%31 = bitcast i8* %18 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32*, i32*, i32*, i32*, i32*)* @_ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_ to i8*), i64 %22, i32 %24, i64 %28, i32 %30, i8** %kernel_args, i64 %17, %struct.CUstream_st* %31)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
declare dso_local i32 @cudaThreadSynchronize() #1
; Function Attrs: noinline optnone uwtable
define internal void @_ZL17preallocBlockSumsj(i32 %maxNumElements) #0 {
entry:
%maxNumElements.addr = alloca i32, align 4
%blockSize = alloca i32, align 4
%numElts = alloca i32, align 4
%level = alloca i32, align 4
%numBlocks = alloca i32, align 4
%numBlocks19 = alloca i32, align 4
%err = alloca i32, align 4
%err52 = alloca i32, align 4
store i32 %maxNumElements, i32* %maxNumElements.addr, align 4
%0 = load i32, i32* @_ZL18g_numEltsAllocated, align 4
%cmp = icmp eq i32 %0, 0
br i1 %cmp, label %cond.true, label %cond.false
cond.true: ; preds = %entry
br label %cond.end
cond.false: ; preds = %entry
call void @__assert_fail(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.16, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 63, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @__PRETTY_FUNCTION__._ZL17preallocBlockSumsj, i64 0, i64 0)) #16
unreachable
1: ; No predecessors!
br label %cond.end
cond.end: ; preds = %1, %cond.true
%2 = load i32, i32* %maxNumElements.addr, align 4
store i32 %2, i32* @_ZL18g_numEltsAllocated, align 4
store i32 256, i32* %blockSize, align 4
%3 = load i32, i32* %maxNumElements.addr, align 4
store i32 %3, i32* %numElts, align 4
store i32 0, i32* %level, align 4
br label %do.body
do.body: ; preds = %do.cond, %cond.end
%4 = load i32, i32* %numElts, align 4
%conv = uitofp i32 %4 to float
%5 = load i32, i32* %blockSize, align 4
%conv1 = uitofp i32 %5 to float
%mul = fmul contract float 2.000000e+00, %conv1
%div = fdiv float %conv, %mul
%call = call float @_ZSt4ceilf(float %div)
%conv2 = fptosi float %call to i32
%cmp3 = icmp sgt i32 1, %conv2
br i1 %cmp3, label %cond.true4, label %cond.false5
cond.true4: ; preds = %do.body
br label %cond.end12
cond.false5: ; preds = %do.body
%6 = load i32, i32* %numElts, align 4
%conv6 = uitofp i32 %6 to float
%7 = load i32, i32* %blockSize, align 4
%conv7 = uitofp i32 %7 to float
%mul8 = fmul contract float 2.000000e+00, %conv7
%div9 = fdiv float %conv6, %mul8
%call10 = call float @_ZSt4ceilf(float %div9)
%conv11 = fptosi float %call10 to i32
br label %cond.end12
cond.end12: ; preds = %cond.false5, %cond.true4
%cond = phi i32 [ 1, %cond.true4 ], [ %conv11, %cond.false5 ]
store i32 %cond, i32* %numBlocks, align 4
%8 = load i32, i32* %numBlocks, align 4
%cmp13 = icmp ugt i32 %8, 1
br i1 %cmp13, label %if.then, label %if.end
if.then: ; preds = %cond.end12
%9 = load i32, i32* %level, align 4
%inc = add nsw i32 %9, 1
store i32 %inc, i32* %level, align 4
br label %if.end
if.end: ; preds = %if.then, %cond.end12
%10 = load i32, i32* %numBlocks, align 4
store i32 %10, i32* %numElts, align 4
br label %do.cond
do.cond: ; preds = %if.end
%11 = load i32, i32* %numElts, align 4
%cmp14 = icmp ugt i32 %11, 1
br i1 %cmp14, label %do.body, label %do.end
do.end: ; preds = %do.cond
%12 = load i32, i32* %level, align 4
%conv15 = sext i32 %12 to i64
%mul16 = mul i64 %conv15, 8
%call17 = call noalias i8* @malloc(i64 %mul16) #3
%13 = bitcast i8* %call17 to i32**
store i32** %13, i32*** @_ZL15g_scanBlockSums, align 8
%14 = load i32, i32* %level, align 4
store i32 %14, i32* @_ZL20g_numLevelsAllocated, align 4
%15 = load i32, i32* %maxNumElements.addr, align 4
store i32 %15, i32* %numElts, align 4
store i32 0, i32* %level, align 4
br label %do.body18
do.body18: ; preds = %do.cond49, %do.end
%16 = load i32, i32* %numElts, align 4
%conv20 = uitofp i32 %16 to float
%17 = load i32, i32* %blockSize, align 4
%conv21 = uitofp i32 %17 to float
%mul22 = fmul contract float 2.000000e+00, %conv21
%div23 = fdiv float %conv20, %mul22
%call24 = call float @_ZSt4ceilf(float %div23)
%conv25 = fptosi float %call24 to i32
%cmp26 = icmp sgt i32 1, %conv25
br i1 %cmp26, label %cond.true27, label %cond.false28
cond.true27: ; preds = %do.body18
br label %cond.end35
cond.false28: ; preds = %do.body18
%18 = load i32, i32* %numElts, align 4
%conv29 = uitofp i32 %18 to float
%19 = load i32, i32* %blockSize, align 4
%conv30 = uitofp i32 %19 to float
%mul31 = fmul contract float 2.000000e+00, %conv30
%div32 = fdiv float %conv29, %mul31
%call33 = call float @_ZSt4ceilf(float %div32)
%conv34 = fptosi float %call33 to i32
br label %cond.end35
cond.end35: ; preds = %cond.false28, %cond.true27
%cond36 = phi i32 [ 1, %cond.true27 ], [ %conv34, %cond.false28 ]
store i32 %cond36, i32* %numBlocks19, align 4
%20 = load i32, i32* %numBlocks19, align 4
%cmp37 = icmp ugt i32 %20, 1
br i1 %cmp37, label %if.then38, label %if.end48
if.then38: ; preds = %cond.end35
%21 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%22 = load i32, i32* %level, align 4
%inc39 = add nsw i32 %22, 1
store i32 %inc39, i32* %level, align 4
%idxprom = sext i32 %22 to i64
%arrayidx = getelementptr inbounds i32*, i32** %21, i64 %idxprom
%23 = bitcast i32** %arrayidx to i8**
%24 = load i32, i32* %numBlocks19, align 4
%conv40 = zext i32 %24 to i64
%mul41 = mul i64 %conv40, 4
%call42 = call i32 @cudaMalloc(i8** %23, i64 %mul41)
store i32 %call42, i32* %err, align 4
%25 = load i32, i32* %err, align 4
%cmp43 = icmp ne i32 0, %25
br i1 %cmp43, label %if.then44, label %if.end47
if.then44: ; preds = %if.then38
%26 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%27 = load i32, i32* %err, align 4
%call45 = call i8* @cudaGetErrorString(i32 %27)
%call46 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %26, i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 89, i8* %call45)
call void @exit(i32 1) #16
unreachable
if.end47: ; preds = %if.then38
br label %if.end48
if.end48: ; preds = %if.end47, %cond.end35
%28 = load i32, i32* %numBlocks19, align 4
store i32 %28, i32* %numElts, align 4
br label %do.cond49
do.cond49: ; preds = %if.end48
%29 = load i32, i32* %numElts, align 4
%cmp50 = icmp ugt i32 %29, 1
br i1 %cmp50, label %do.body18, label %do.end51
do.end51: ; preds = %do.cond49
%call53 = call i32 @cudaGetLastError()
store i32 %call53, i32* %err52, align 4
%30 = load i32, i32* %err52, align 4
%cmp54 = icmp ne i32 0, %30
br i1 %cmp54, label %if.then55, label %if.end58
if.then55: ; preds = %do.end51
%31 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%32 = load i32, i32* %err52, align 4
%call56 = call i8* @cudaGetErrorString(i32 %32)
%call57 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %31, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 93, i8* %call56)
call void @exit(i32 1) #16
unreachable
if.end58: ; preds = %do.end51
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL12prescanArrayPjS_i(i32* %outArray, i32* %inArray, i32 %numElements) #0 {
entry:
%outArray.addr = alloca i32*, align 8
%inArray.addr = alloca i32*, align 8
%numElements.addr = alloca i32, align 4
store i32* %outArray, i32** %outArray.addr, align 8
store i32* %inArray, i32** %inArray.addr, align 8
store i32 %numElements, i32* %numElements.addr, align 4
%0 = load i32*, i32** %outArray.addr, align 8
%1 = load i32*, i32** %inArray.addr, align 8
%2 = load i32, i32* %numElements.addr, align 4
call void @_ZL21prescanArrayRecursivePjPKjii(i32* %0, i32* %1, i32 %2, i32 0)
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL5pack2PjS_S_S_j(i32* %srcData, i32* %cindex, i32* %cindex2, i32* %dstData, i32 %original_num_block_elements) #0 {
entry:
%srcData.addr = alloca i32*, align 8
%cindex.addr = alloca i32*, align 8
%cindex2.addr = alloca i32*, align 8
%dstData.addr = alloca i32*, align 8
%original_num_block_elements.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %srcData, i32** %srcData.addr, align 8
store i32* %cindex, i32** %cindex.addr, align 8
store i32* %cindex2, i32** %cindex2.addr, align 8
store i32* %dstData, i32** %dstData.addr, align 8
store i32 %original_num_block_elements, i32* %original_num_block_elements.addr, align 4
%kernel_args = alloca i8*, i64 5, align 16
%0 = bitcast i32** %srcData.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %cindex.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %cindex2.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32** %dstData.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %original_num_block_elements.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%11 = load i64, i64* %shmem_size, align 8
%12 = load i8*, i8** %stream, align 8
%13 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%14 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 12, i1 false)
%15 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%16 = load i64, i64* %15, align 8
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%18 = load i32, i32* %17, align 8
%19 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%20 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %19, i8* align 8 %20, i64 12, i1 false)
%21 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%22 = load i64, i64* %21, align 8
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast i8* %12 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32*, i32)* @_ZL5pack2PjS_S_S_j to i8*), i64 %16, i32 %18, i64 %22, i32 %24, i8** %kernel_args, i64 %11, %struct.CUstream_st* %25)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
declare dso_local i32 @cudaGetLastError() #1
; Function Attrs: noinline optnone uwtable
define internal void @_ZL16deallocBlockSumsv() #0 {
entry:
%i = alloca i32, align 4
%err = alloca i32, align 4
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%1 = load i32, i32* @_ZL20g_numLevelsAllocated, align 4
%cmp = icmp ult i32 %0, %1
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%2 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%3 = load i32, i32* %i, align 4
%idxprom = zext i32 %3 to i64
%arrayidx = getelementptr inbounds i32*, i32** %2, i64 %idxprom
%4 = load i32*, i32** %arrayidx, align 8
%5 = bitcast i32* %4 to i8*
%call = call i32 @cudaFree(i8* %5)
br label %for.inc
for.inc: ; preds = %for.body
%6 = load i32, i32* %i, align 4
%inc = add i32 %6, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
%call1 = call i32 @cudaGetLastError()
store i32 %call1, i32* %err, align 4
%7 = load i32, i32* %err, align 4
%cmp2 = icmp ne i32 0, %7
br i1 %cmp2, label %if.then, label %if.end
if.then: ; preds = %for.end
%8 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%9 = load i32, i32* %err, align 4
%call3 = call i8* @cudaGetErrorString(i32 %9)
%call4 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %8, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 101, i8* %call3)
call void @exit(i32 1) #16
unreachable
if.end: ; preds = %for.end
%10 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%11 = bitcast i32** %10 to i8**
%12 = bitcast i8** %11 to i8*
call void @free(i8* %12) #3
store i32** null, i32*** @_ZL15g_scanBlockSums, align 8
store i32 0, i32* @_ZL18g_numEltsAllocated, align 4
store i32 0, i32* @_ZL20g_numLevelsAllocated, align 4
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i32 @_Z15compare_vectorsIjEiPT_S1_j(i32* %data1, i32* %data2, i32 %size) #0 comdat {
entry:
%data1.addr = alloca i32*, align 8
%data2.addr = alloca i32*, align 8
%size.addr = alloca i32, align 4
%match = alloca i8, align 1
%i = alloca i32, align 4
store i32* %data1, i32** %data1.addr, align 8
store i32* %data2, i32** %data2.addr, align 8
store i32 %size, i32* %size.addr, align 4
%call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.28, i64 0, i64 0))
store i8 1, i8* %match, align 1
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%0 = load i32, i32* %i, align 4
%1 = load i32, i32* %size.addr, align 4
%cmp = icmp ult i32 %0, %1
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%2 = load i32*, i32** %data1.addr, align 8
%3 = load i32, i32* %i, align 4
%idxprom = zext i32 %3 to i64
%arrayidx = getelementptr inbounds i32, i32* %2, i64 %idxprom
%4 = load i32, i32* %arrayidx, align 4
%5 = load i32*, i32** %data2.addr, align 8
%6 = load i32, i32* %i, align 4
%idxprom1 = zext i32 %6 to i64
%arrayidx2 = getelementptr inbounds i32, i32* %5, i64 %idxprom1
%7 = load i32, i32* %arrayidx2, align 4
%cmp3 = icmp ne i32 %4, %7
br i1 %cmp3, label %if.then, label %if.end
if.then: ; preds = %for.body
store i8 0, i8* %match, align 1
%8 = load i32, i32* %i, align 4
%9 = load i32*, i32** %data1.addr, align 8
%10 = load i32, i32* %i, align 4
%idxprom4 = zext i32 %10 to i64
%arrayidx5 = getelementptr inbounds i32, i32* %9, i64 %idxprom4
%11 = load i32, i32* %arrayidx5, align 4
%12 = load i32, i32* %i, align 4
%13 = load i32*, i32** %data2.addr, align 8
%14 = load i32, i32* %i, align 4
%idxprom6 = zext i32 %14 to i64
%arrayidx7 = getelementptr inbounds i32, i32* %13, i64 %idxprom6
%15 = load i32, i32* %arrayidx7, align 4
%call8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.29, i64 0, i64 0), i32 %8, i32 %11, i32 %12, i32 %15)
br label %if.end
if.end: ; preds = %if.then, %for.body
br label %for.inc
for.inc: ; preds = %if.end
%16 = load i32, i32* %i, align 4
%inc = add i32 %16, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end: ; preds = %for.cond
%17 = load i8, i8* %match, align 1
%tobool = trunc i8 %17 to i1
br i1 %tobool, label %if.then9, label %if.else
if.then9: ; preds = %for.end
%call10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.30, i64 0, i64 0))
ret i32 0
if.else: ; preds = %for.end
%call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.31, i64 0, i64 0))
call void @exit(i32 1) #16
unreachable
}
; Function Attrs: nounwind
declare dso_local void @free(i8*) #11
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN5INodeC2Ei(%class.INode* %this, i32 %f) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %class.INode*, align 8
%f.addr = alloca i32, align 4
store %class.INode* %this, %class.INode** %this.addr, align 8
store i32 %f, i32* %f.addr, align 4
%this1 = load %class.INode*, %class.INode** %this.addr, align 8
%0 = bitcast %class.INode* %this1 to i32 (...)***
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [4 x i8*] }, { [4 x i8*] }* @_ZTV5INode, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8
%f2 = getelementptr inbounds %class.INode, %class.INode* %this1, i32 0, i32 1
%1 = load i32, i32* %f.addr, align 4
store i32 %1, i32* %f2, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN8LeafNodeD2Ev(%class.LeafNode* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %class.LeafNode*, align 8
store %class.LeafNode* %this, %class.LeafNode** %this.addr, align 8
%this1 = load %class.LeafNode*, %class.LeafNode** %this.addr, align 8
%0 = bitcast %class.LeafNode* %this1 to %class.INode*
call void @_ZN5INodeD2Ev(%class.INode* %0)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN8LeafNodeD0Ev(%class.LeafNode* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %class.LeafNode*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %class.LeafNode* %this, %class.LeafNode** %this.addr, align 8
%this1 = load %class.LeafNode*, %class.LeafNode** %this.addr, align 8
invoke void @_ZN8LeafNodeD2Ev(%class.LeafNode* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%0 = bitcast %class.LeafNode* %this1 to i8*
call void @_ZdlPv(i8* %0) #18
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
%4 = bitcast %class.LeafNode* %this1 to i8*
call void @_ZdlPv(i8* %4) #18
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN5INodeD2Ev(%class.INode* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %class.INode*, align 8
store %class.INode* %this, %class.INode** %this.addr, align 8
%this1 = load %class.INode*, %class.INode** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN5INodeD0Ev(%class.INode* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %class.INode*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %class.INode* %this, %class.INode** %this.addr, align 8
%this1 = load %class.INode*, %class.INode** %this.addr, align 8
invoke void @_ZN5INodeD2Ev(%class.INode* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%0 = bitcast %class.INode* %this1 to i8*
call void @_ZdlPv(i8* %0) #18
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
%4 = bitcast %class.INode* %this1 to i8*
call void @_ZdlPv(i8* %4) #18
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: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN12InternalNodeD2Ev(%class.InternalNode* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %class.InternalNode*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %class.InternalNode* %this, %class.InternalNode** %this.addr, align 8
%this1 = load %class.InternalNode*, %class.InternalNode** %this.addr, align 8
%0 = bitcast %class.InternalNode* %this1 to i32 (...)***
store i32 (...)** bitcast (i8** getelementptr inbounds ({ [4 x i8*] }, { [4 x i8*] }* @_ZTV12InternalNode, i32 0, inrange i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8
%left = getelementptr inbounds %class.InternalNode, %class.InternalNode* %this1, i32 0, i32 1
%1 = load %class.INode*, %class.INode** %left, align 8
%isnull = icmp eq %class.INode* %1, null
br i1 %isnull, label %delete.end, label %delete.notnull
delete.notnull: ; preds = %entry
%2 = bitcast %class.INode* %1 to void (%class.INode*)***
%vtable = load void (%class.INode*)**, void (%class.INode*)*** %2, align 8
%vfn = getelementptr inbounds void (%class.INode*)*, void (%class.INode*)** %vtable, i64 1
%3 = load void (%class.INode*)*, void (%class.INode*)** %vfn, align 8
invoke void %3(%class.INode* %1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %delete.notnull
br label %delete.end
delete.end: ; preds = %invoke.cont, %entry
%right = getelementptr inbounds %class.InternalNode, %class.InternalNode* %this1, i32 0, i32 2
%4 = load %class.INode*, %class.INode** %right, align 8
%isnull2 = icmp eq %class.INode* %4, null
br i1 %isnull2, label %delete.end7, label %delete.notnull3
delete.notnull3: ; preds = %delete.end
%5 = bitcast %class.INode* %4 to void (%class.INode*)***
%vtable4 = load void (%class.INode*)**, void (%class.INode*)*** %5, align 8
%vfn5 = getelementptr inbounds void (%class.INode*)*, void (%class.INode*)** %vtable4, i64 1
%6 = load void (%class.INode*)*, void (%class.INode*)** %vfn5, align 8
invoke void %6(%class.INode* %4)
to label %invoke.cont6 unwind label %lpad
invoke.cont6: ; preds = %delete.notnull3
br label %delete.end7
delete.end7: ; preds = %invoke.cont6, %delete.end
%7 = bitcast %class.InternalNode* %this1 to %class.INode*
call void @_ZN5INodeD2Ev(%class.INode* %7)
ret void
lpad: ; preds = %delete.notnull3, %delete.notnull
%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
%11 = bitcast %class.InternalNode* %this1 to %class.INode*
invoke void @_ZN5INodeD2Ev(%class.INode* %11)
to label %invoke.cont8 unwind label %terminate.lpad
invoke.cont8: ; preds = %lpad
br label %eh.resume
eh.resume: ; preds = %invoke.cont8
%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
terminate.lpad: ; preds = %lpad
%12 = landingpad { i8*, i32 }
catch i8* null
%13 = extractvalue { i8*, i32 } %12, 0
call void @__clang_call_terminate(i8* %13) #16
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN12InternalNodeD0Ev(%class.InternalNode* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %class.InternalNode*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %class.InternalNode* %this, %class.InternalNode** %this.addr, align 8
%this1 = load %class.InternalNode*, %class.InternalNode** %this.addr, align 8
invoke void @_ZN12InternalNodeD2Ev(%class.InternalNode* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%0 = bitcast %class.InternalNode* %this1 to i8*
call void @_ZdlPv(i8* %0) #18
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
%4 = bitcast %class.InternalNode* %this1 to i8*
call void @_ZdlPv(i8* %4) #18
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 dso_local i64 @ftell(%struct._IO_FILE*) #1
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEEC2Ev(%"class.std::map"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::map"*, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EEC2Ev(%"class.std::_Rb_tree"* %_M_t)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEEC2Ev(%"class.std::vector.0"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
call void @_ZNSt13_Bvector_baseISaIbEEC2Ev(%"struct.std::_Bvector_base"* %0)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE5beginEv(%"class.std::map"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::map"*, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE5beginEv(%"class.std::_Rb_tree"* %_M_t)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
ret %"struct.std::_Rb_tree_node_base"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2ERKSt17_Rb_tree_iteratorIS5_E(%"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %__it) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
%__it.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
store %"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
store %"struct.std::_Rb_tree_iterator"* %__it, %"struct.std::_Rb_tree_iterator"** %__it.addr, align 8
%this1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %__it.addr, align 8
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %0, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
store %"struct.std::_Rb_tree_node_base"* %1, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEneERKS6_(%"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"* dereferenceable(8) %__x) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
store %"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
store %"struct.std::_Rb_tree_const_iterator"* %__x, %"struct.std::_Rb_tree_const_iterator"** %__x.addr, align 8
%this1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %__x.addr, align 8
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %1, i32 0, i32 0
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
%cmp = icmp ne %"struct.std::_Rb_tree_node_base"* %0, %2
ret i1 %cmp
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE3endEv(%"class.std::map"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::map"*, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE3endEv(%"class.std::_Rb_tree"* %_M_t)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
ret %"struct.std::_Rb_tree_node_base"* %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZSt8distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1) #0 comdat {
entry:
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp2 = alloca %"struct.std::random_access_iterator_tag", align 1
%undef.agg.tmp = alloca %"struct.std::random_access_iterator_tag", align 1
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to i8*
%7 = bitcast %"struct.std::_Bit_const_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %6, i8* align 8 %7, i64 16, i1 false)
%8 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to i8*
%9 = bitcast %"struct.std::_Bit_const_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %8, i8* align 8 %9, i64 16, i1 false)
call void @_ZSt19__iterator_categoryISt19_Bit_const_iteratorENSt15iterator_traitsIT_E17iterator_categoryERKS2_(%"struct.std::_Bit_const_iterator"* dereferenceable(16) %__first)
%10 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%11 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %10, i32 0, i32 0
%12 = load i64*, i64** %11, align 8
%13 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %10, i32 0, i32 1
%14 = load i32, i32* %13, align 8
%15 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to { i64*, i32 }*
%16 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 0
%17 = load i64*, i64** %16, align 8
%18 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 1
%19 = load i32, i32* %18, align 8
%call = call i64 @_ZSt10__distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag(i64* %12, i32 %14, i64* %17, i32 %19)
ret i64 %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::pair"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEptEv(%"struct.std::_Rb_tree_const_iterator"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
store %"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%1 = bitcast %"struct.std::_Rb_tree_node_base"* %0 to %"struct.std::_Rb_tree_node"*
%call = call %"struct.std::pair"* @_ZNKSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %1)
ret %"struct.std::pair"* %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_const_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 0
call void @_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator(%"struct.std::_Bit_const_iterator"* %retval, %"struct.std::_Bit_iterator"* dereferenceable(16) %_M_start)
%1 = bitcast %"struct.std::_Bit_const_iterator"* %retval to { i64*, i32 }*
%2 = load { i64*, i32 }, { i64*, i32 }* %1, align 8
ret { i64*, i32 } %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNKSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_const_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 1
call void @_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator(%"struct.std::_Bit_const_iterator"* %retval, %"struct.std::_Bit_iterator"* dereferenceable(16) %_M_finish)
%1 = bitcast %"struct.std::_Bit_const_iterator"* %retval to { i64*, i32 }*
%2 = load { i64*, i32 }, { i64*, i32 }* %1, align 8
ret { i64*, i32 } %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt6vectorIbSaIbEEixEm(%"class.std::vector.0"* %this, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__n.addr = alloca i64, align 8
%ref.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 0
%1 = bitcast %"struct.std::_Bit_iterator"* %_M_start to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %1, i32 0, i32 0
%2 = load i64*, i64** %_M_p, align 8
%3 = load i64, i64* %__n.addr, align 8
%div = udiv i64 %3, 64
%add.ptr = getelementptr inbounds i64, i64* %2, i64 %div
%4 = load i64, i64* %__n.addr, align 8
%rem = urem i64 %4, 64
%conv = trunc i64 %rem to i32
call void @_ZNSt19_Bit_const_iteratorC2EPmj(%"struct.std::_Bit_const_iterator"* %ref.tmp, i64* %add.ptr, i32 %conv)
%call = call zeroext i1 @_ZNKSt19_Bit_const_iteratordeEv(%"struct.std::_Bit_const_iterator"* %ref.tmp)
ret i1 %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local float @_ZSt3powfi(float %__x, i32 %__n) #6 comdat {
entry:
%__x.addr = alloca float, align 4
%__n.addr = alloca i32, align 4
store float %__x, float* %__x.addr, align 4
store i32 %__n, i32* %__n.addr, align 4
%0 = load float, float* %__x.addr, align 4
%1 = load i32, i32* %__n.addr, align 4
%2 = call float @llvm.powi.f32(float %0, i32 %1)
ret float %2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"struct.std::_Rb_tree_const_iterator"* @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv(%"struct.std::_Rb_tree_const_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
store %"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %0) #10
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
ret %"struct.std::_Rb_tree_const_iterator"* %this1
}
; Function Attrs: nounwind
declare dso_local double @log(double) #11
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEED2Ev(%"class.std::map"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::map"*, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EED2Ev(%"class.std::_Rb_tree"* %_M_t)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EEC2Ev(%"class.std::_Rb_tree"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EEC2Ev(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EEC2Ev(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this1 to %"class.std::allocator.4"*
call void @_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev(%"class.std::allocator.4"* %0) #3
%1 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this1 to %"struct.std::_Rb_tree_key_compare"*
invoke void @_ZNSt20_Rb_tree_key_compareISt4lessIhEEC2Ev(%"struct.std::_Rb_tree_key_compare"* %1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%2 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this1 to i8*
%3 = getelementptr inbounds i8, i8* %2, i64 8
%4 = bitcast i8* %3 to %"struct.std::_Rb_tree_header"*
invoke void @_ZNSt15_Rb_tree_headerC2Ev(%"struct.std::_Rb_tree_header"* %4)
to label %invoke.cont2 unwind label %lpad
invoke.cont2: ; preds = %invoke.cont
ret void
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
%8 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this1 to %"class.std::allocator.4"*
call void @_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev(%"class.std::allocator.4"* %8) #3
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev(%"class.std::allocator.4"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.4"*, align 8
store %"class.std::allocator.4"* %this, %"class.std::allocator.4"** %this.addr, align 8
%this1 = load %"class.std::allocator.4"*, %"class.std::allocator.4"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.4"* %this1 to %"class.__gnu_cxx::new_allocator.5"*
call void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev(%"class.__gnu_cxx::new_allocator.5"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt20_Rb_tree_key_compareISt4lessIhEEC2Ev(%"struct.std::_Rb_tree_key_compare"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_key_compare"*, align 8
store %"struct.std::_Rb_tree_key_compare"* %this, %"struct.std::_Rb_tree_key_compare"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_key_compare"*, %"struct.std::_Rb_tree_key_compare"** %this.addr, align 8
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %this1, i32 0, i32 0
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt15_Rb_tree_headerC2Ev(%"struct.std::_Rb_tree_header"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_header"*, align 8
store %"struct.std::_Rb_tree_header"* %this, %"struct.std::_Rb_tree_header"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_header"*, %"struct.std::_Rb_tree_header"** %this.addr, align 8
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_header2 = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_color = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header2, i32 0, i32 0
store i32 0, i32* %_M_color, align 8
call void @_ZNSt15_Rb_tree_header8_M_resetEv(%"struct.std::_Rb_tree_header"* %this1)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev(%"class.std::allocator.4"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.4"*, align 8
store %"class.std::allocator.4"* %this, %"class.std::allocator.4"** %this.addr, align 8
%this1 = load %"class.std::allocator.4"*, %"class.std::allocator.4"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.4"* %this1 to %"class.__gnu_cxx::new_allocator.5"*
call void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev(%"class.__gnu_cxx::new_allocator.5"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEC2Ev(%"class.__gnu_cxx::new_allocator.5"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.5"*, align 8
store %"class.__gnu_cxx::new_allocator.5"* %this, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.5"*, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt15_Rb_tree_header8_M_resetEv(%"struct.std::_Rb_tree_header"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_header"*, align 8
store %"struct.std::_Rb_tree_header"* %this, %"struct.std::_Rb_tree_header"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_header"*, %"struct.std::_Rb_tree_header"** %this.addr, align 8
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_parent = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header, i32 0, i32 1
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %_M_parent, align 8
%_M_header2 = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_header3 = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_left = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header3, i32 0, i32 2
store %"struct.std::_Rb_tree_node_base"* %_M_header2, %"struct.std::_Rb_tree_node_base"** %_M_left, align 8
%_M_header4 = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_header5 = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 0
%_M_right = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header5, i32 0, i32 3
store %"struct.std::_Rb_tree_node_base"* %_M_header4, %"struct.std::_Rb_tree_node_base"** %_M_right, align 8
%_M_node_count = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %this1, i32 0, i32 1
store i64 0, i64* %_M_node_count, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev(%"class.__gnu_cxx::new_allocator.5"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.5"*, align 8
store %"class.__gnu_cxx::new_allocator.5"* %this, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.5"*, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEEC2Ev(%"struct.std::_Bvector_base"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
call void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2Ev(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2Ev(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1 to %"class.std::allocator.1"*
call void @_ZNSaImEC2Ev(%"class.std::allocator.1"* %0) #3
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 0
invoke void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %_M_start)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 1
invoke void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %_M_finish)
to label %invoke.cont2 unwind label %lpad
invoke.cont2: ; preds = %invoke.cont
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 2
store i64* null, i64** %_M_end_of_storage, align 8
ret void
lpad: ; preds = %invoke.cont, %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
%4 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1 to %"class.std::allocator.1"*
call void @_ZNSaImED2Ev(%"class.std::allocator.1"* %4) #3
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaImEC2Ev(%"class.std::allocator.1"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.1"* %this, %"class.std::allocator.1"** %this.addr, align 8
%this1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.1"* %this1 to %"class.__gnu_cxx::new_allocator.2"*
call void @_ZN9__gnu_cxx13new_allocatorImEC2Ev(%"class.__gnu_cxx::new_allocator.2"* %0) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
call void @_ZNSt18_Bit_iterator_baseC2EPmj(%"struct.std::_Bit_iterator_base"* %0, i64* null, i32 0)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorImEC2Ev(%"class.__gnu_cxx::new_allocator.2"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt18_Bit_iterator_baseC2EPmj(%"struct.std::_Bit_iterator_base"* %this, i64* %__x, i32 %__y) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
%__x.addr = alloca i64*, align 8
%__y.addr = alloca i32, align 4
store %"struct.std::_Bit_iterator_base"* %this, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
store i64* %__x, i64** %__x.addr, align 8
store i32 %__y, i32* %__y.addr, align 4
%this1 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator_base"* %this1 to %"struct.std::iterator"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 0
%1 = load i64*, i64** %__x.addr, align 8
store i64* %1, i64** %_M_p, align 8
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
%2 = load i32, i32* %__y.addr, align 4
store i32 %2, i32* %_M_offset, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorImED2Ev(%"class.__gnu_cxx::new_allocator.2"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE5beginEv(%"class.std::_Rb_tree"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
%_M_left = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header, i32 0, i32 2
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_left, align 8
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %2)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%3 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
ret %"struct.std::_Rb_tree_node_base"* %3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_node_base"* %__x) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
store %"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%this1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
store %"struct.std::_Rb_tree_node_base"* %0, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE3endEv(%"class.std::_Rb_tree"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %_M_header)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
ret %"struct.std::_Rb_tree_node_base"* %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZSt10__distanceISt19_Bit_const_iteratorENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1) #0 comdat {
entry:
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%0 = alloca %"struct.std::random_access_iterator_tag", align 1
%1 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %1, i32 0, i32 0
store i64* %__first.coerce0, i64** %2, align 8
%3 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %1, i32 0, i32 1
store i32 %__first.coerce1, i32* %3, align 8
%4 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %4, i32 0, i32 0
store i64* %__last.coerce0, i64** %5, align 8
%6 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %4, i32 0, i32 1
store i32 %__last.coerce1, i32* %6, align 8
%7 = bitcast %"struct.std::_Bit_const_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%8 = bitcast %"struct.std::_Bit_const_iterator"* %__first to %"struct.std::_Bit_iterator_base"*
%call = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %7, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %8)
ret i64 %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZSt19__iterator_categoryISt19_Bit_const_iteratorENSt15iterator_traitsIT_E17iterator_categoryERKS2_(%"struct.std::_Bit_const_iterator"* dereferenceable(16) %0) #6 comdat {
entry:
%.addr = alloca %"struct.std::_Bit_const_iterator"*, align 8
store %"struct.std::_Bit_const_iterator"* %0, %"struct.std::_Bit_const_iterator"** %.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %__x, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %__y) #6 comdat {
entry:
%__x.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
%__y.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
store %"struct.std::_Bit_iterator_base"* %__x, %"struct.std::_Bit_iterator_base"** %__x.addr, align 8
store %"struct.std::_Bit_iterator_base"* %__y, %"struct.std::_Bit_iterator_base"** %__y.addr, align 8
%0 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %__x.addr, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %0, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%2 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %__y.addr, align 8
%_M_p1 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %2, i32 0, i32 0
%3 = load i64*, i64** %_M_p1, align 8
%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
%mul = mul nsw i64 64, %sub.ptr.div
%4 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %__x.addr, align 8
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %4, i32 0, i32 1
%5 = load i32, i32* %_M_offset, align 8
%conv = zext i32 %5 to i64
%add = add nsw i64 %mul, %conv
%6 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %__y.addr, align 8
%_M_offset2 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %6, i32 0, i32 1
%7 = load i32, i32* %_M_offset2, align 8
%conv3 = zext i32 %7 to i64
%sub = sub nsw i64 %add, %conv3
ret i64 %sub
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::pair"* @_ZNKSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"struct.std::_Rb_tree_node"* %this, %"struct.std::_Rb_tree_node"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %this.addr, align 8
%_M_value_field = getelementptr inbounds %"struct.std::_Rb_tree_node", %"struct.std::_Rb_tree_node"* %this1, i32 0, i32 1
%call = call %"struct.std::pair"* @_ZSt11__addressofIKSt4pairIKhSt6vectorIbSaIbEEEEPT_RS7_(%"struct.std::pair"* dereferenceable(48) %_M_value_field)
ret %"struct.std::pair"* %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::pair"* @_ZSt11__addressofIKSt4pairIKhSt6vectorIbSaIbEEEEPT_RS7_(%"struct.std::pair"* dereferenceable(48) %__r) #6 comdat {
entry:
%__r.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::pair"* %__r, %"struct.std::pair"** %__r.addr, align 8
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__r.addr, align 8
ret %"struct.std::pair"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator(%"struct.std::_Bit_const_iterator"* %this, %"struct.std::_Bit_iterator"* dereferenceable(16) %__x) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_const_iterator"*, align 8
%__x.addr = alloca %"struct.std::_Bit_iterator"*, align 8
store %"struct.std::_Bit_const_iterator"* %this, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
store %"struct.std::_Bit_iterator"* %__x, %"struct.std::_Bit_iterator"** %__x.addr, align 8
%this1 = load %"struct.std::_Bit_const_iterator"*, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %__x.addr, align 8
%2 = bitcast %"struct.std::_Bit_iterator"* %1 to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %2, i32 0, i32 0
%3 = load i64*, i64** %_M_p, align 8
%4 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %__x.addr, align 8
%5 = bitcast %"struct.std::_Bit_iterator"* %4 to %"struct.std::_Bit_iterator_base"*
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %5, i32 0, i32 1
%6 = load i32, i32* %_M_offset, align 8
call void @_ZNSt18_Bit_iterator_baseC2EPmj(%"struct.std::_Bit_iterator_base"* %0, i64* %3, i32 %6)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt19_Bit_const_iteratorC2EPmj(%"struct.std::_Bit_const_iterator"* %this, i64* %__x, i32 %__y) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_const_iterator"*, align 8
%__x.addr = alloca i64*, align 8
%__y.addr = alloca i32, align 4
store %"struct.std::_Bit_const_iterator"* %this, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
store i64* %__x, i64** %__x.addr, align 8
store i32 %__y, i32* %__y.addr, align 4
%this1 = load %"struct.std::_Bit_const_iterator"*, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%1 = load i64*, i64** %__x.addr, align 8
%2 = load i32, i32* %__y.addr, align 4
call void @_ZNSt18_Bit_iterator_baseC2EPmj(%"struct.std::_Bit_iterator_base"* %0, i64* %1, i32 %2)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt19_Bit_const_iteratordeEv(%"struct.std::_Bit_const_iterator"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_const_iterator"*, align 8
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
store %"struct.std::_Bit_const_iterator"* %this, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_const_iterator"*, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %0, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%2 = bitcast %"struct.std::_Bit_const_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %2, i32 0, i32 1
%3 = load i32, i32* %_M_offset, align 8
%sh_prom = zext i32 %3 to i64
%shl = shl i64 1, %sh_prom
call void @_ZNSt14_Bit_referenceC2EPmm(%"struct.std::_Bit_reference"* %ref.tmp, i64* %1, i64 %shl)
%call = call zeroext i1 @_ZNKSt14_Bit_referencecvbEv(%"struct.std::_Bit_reference"* %ref.tmp)
ret i1 %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt14_Bit_referenceC2EPmm(%"struct.std::_Bit_reference"* %this, i64* %__x, i64 %__y) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_reference"*, align 8
%__x.addr = alloca i64*, align 8
%__y.addr = alloca i64, align 8
store %"struct.std::_Bit_reference"* %this, %"struct.std::_Bit_reference"** %this.addr, align 8
store i64* %__x, i64** %__x.addr, align 8
store i64 %__y, i64* %__y.addr, align 8
%this1 = load %"struct.std::_Bit_reference"*, %"struct.std::_Bit_reference"** %this.addr, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 0
%0 = load i64*, i64** %__x.addr, align 8
store i64* %0, i64** %_M_p, align 8
%_M_mask = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 1
%1 = load i64, i64* %__y.addr, align 8
store i64 %1, i64* %_M_mask, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt14_Bit_referencecvbEv(%"struct.std::_Bit_reference"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_reference"*, align 8
store %"struct.std::_Bit_reference"* %this, %"struct.std::_Bit_reference"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_reference"*, %"struct.std::_Bit_reference"** %this.addr, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 0
%0 = load i64*, i64** %_M_p, align 8
%1 = load i64, i64* %0, align 8
%_M_mask = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 1
%2 = load i64, i64* %_M_mask, align 8
%and = and i64 %1, %2
%tobool = icmp ne i64 %and, 0
%lnot = xor i1 %tobool, true
%lnot2 = xor i1 %lnot, true
ret i1 %lnot2
}
; Function Attrs: nounwind readnone speculatable willreturn
declare float @llvm.powi.f32(float, i32) #13
; Function Attrs: nounwind readonly
declare dso_local %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"*) #14
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EED2Ev(%"class.std::_Rb_tree"* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = invoke %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_beginEv(%"class.std::_Rb_tree"* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
invoke void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %call)
to label %invoke.cont2 unwind label %lpad
invoke.cont2: ; preds = %invoke.cont
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EED2Ev(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl) #3
ret void
lpad: ; preds = %invoke.cont, %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
%_M_impl3 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EED2Ev(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl3) #3
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: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__x) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%__y = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__x, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
br label %while.cond
while.cond: ; preds = %while.body, %entry
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%cmp = icmp ne %"struct.std::_Rb_tree_node"* %0, null
br i1 %cmp, label %while.body, label %while.end
while.body: ; preds = %while.cond
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%2 = bitcast %"struct.std::_Rb_tree_node"* %1 to %"struct.std::_Rb_tree_node_base"*
%call = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %2)
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_eraseEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %call)
%3 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%4 = bitcast %"struct.std::_Rb_tree_node"* %3 to %"struct.std::_Rb_tree_node_base"*
%call2 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %4)
store %"struct.std::_Rb_tree_node"* %call2, %"struct.std::_Rb_tree_node"** %__y, align 8
%5 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %5)
%6 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__y, align 8
store %"struct.std::_Rb_tree_node"* %6, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
br label %while.cond
while.end: ; preds = %while.cond
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_beginEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
%_M_parent = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header, i32 0, i32 1
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_parent, align 8
%3 = bitcast %"struct.std::_Rb_tree_node_base"* %2 to %"struct.std::_Rb_tree_node"*
ret %"struct.std::_Rb_tree_node"* %3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13_Rb_tree_implIS9_Lb0EED2Ev(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"*, align 8
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %this1 to %"class.std::allocator.4"*
call void @_ZNSaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEED2Ev(%"class.std::allocator.4"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %__x) #6 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%_M_right = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %0, i32 0, i32 3
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_right, align 8
%2 = bitcast %"struct.std::_Rb_tree_node_base"* %1 to %"struct.std::_Rb_tree_node"*
ret %"struct.std::_Rb_tree_node"* %2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %__x) #6 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%_M_left = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %0, i32 0, i32 2
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_left, align 8
%2 = bitcast %"struct.std::_Rb_tree_node_base"* %1 to %"struct.std::_Rb_tree_node"*
ret %"struct.std::_Rb_tree_node"* %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_drop_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__p) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__p, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %0)
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %1)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE15_M_destroy_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__p) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%ref.tmp = alloca %"class.std::allocator.7", align 1
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__p, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
call void @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13get_allocatorEv(%"class.std::allocator.7"* sret %ref.tmp, %"class.std::_Rb_tree"* %this1)
%0 = bitcast %"class.std::allocator.7"* %ref.tmp to %"class.__gnu_cxx::new_allocator.8"*
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%call = invoke %"struct.std::pair"* @_ZNSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
invoke void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE7destroyEPS6_(%"class.__gnu_cxx::new_allocator.8"* %0, %"struct.std::pair"* %call)
to label %invoke.cont2 unwind label %lpad
invoke.cont2: ; preds = %invoke.cont
call void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.std::allocator.7"* %ref.tmp) #3
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 @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.std::allocator.7"* %ref.tmp) #3
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: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__p) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__p, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call dereferenceable(1) %"class.std::allocator.4"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree"* %this1)
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
call void @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE10deallocateERS9_PS8_m(%"class.std::allocator.4"* dereferenceable(1) %call, %"struct.std::_Rb_tree_node"* %0, i64 1)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13get_allocatorEv(%"class.std::allocator.7"* noalias sret %agg.result, %"class.std::_Rb_tree"* %this) #0 comdat align 2 {
entry:
%result.ptr = alloca i8*, align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%0 = bitcast %"class.std::allocator.7"* %agg.result to i8*
store i8* %0, i8** %result.ptr, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call dereferenceable(1) %"class.std::allocator.4"* @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree"* %this1)
call void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEEC2ISt13_Rb_tree_nodeIS4_EEERKSaIT_E(%"class.std::allocator.7"* %agg.result, %"class.std::allocator.4"* dereferenceable(1) %call) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE7destroyEPS6_(%"class.__gnu_cxx::new_allocator.8"* %this, %"struct.std::pair"* %__p) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.8"*, align 8
%__p.addr = alloca %"struct.std::pair"*, align 8
store %"class.__gnu_cxx::new_allocator.8"* %this, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
store %"struct.std::pair"* %__p, %"struct.std::pair"** %__p.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.8"*, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__p.addr, align 8
call void @_ZNSt4pairIKhSt6vectorIbSaIbEEED2Ev(%"struct.std::pair"* %0)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::pair"* @_ZNSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"struct.std::_Rb_tree_node"* %this, %"struct.std::_Rb_tree_node"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %this.addr, align 8
%_M_value_field = getelementptr inbounds %"struct.std::_Rb_tree_node", %"struct.std::_Rb_tree_node"* %this1, i32 0, i32 1
%call = call %"struct.std::pair"* @_ZSt11__addressofISt4pairIKhSt6vectorIbSaIbEEEEPT_RS6_(%"struct.std::pair"* dereferenceable(48) %_M_value_field)
ret %"struct.std::pair"* %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.std::allocator.7"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.7"*, align 8
store %"class.std::allocator.7"* %this, %"class.std::allocator.7"** %this.addr, align 8
%this1 = load %"class.std::allocator.7"*, %"class.std::allocator.7"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.7"* %this1 to %"class.__gnu_cxx::new_allocator.8"*
call void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.__gnu_cxx::new_allocator.8"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator.4"* @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"class.std::allocator.4"*
ret %"class.std::allocator.4"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEEC2ISt13_Rb_tree_nodeIS4_EEERKSaIT_E(%"class.std::allocator.7"* %this, %"class.std::allocator.4"* dereferenceable(1) %0) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.7"*, align 8
%.addr = alloca %"class.std::allocator.4"*, align 8
store %"class.std::allocator.7"* %this, %"class.std::allocator.7"** %this.addr, align 8
store %"class.std::allocator.4"* %0, %"class.std::allocator.4"** %.addr, align 8
%this1 = load %"class.std::allocator.7"*, %"class.std::allocator.7"** %this.addr, align 8
%1 = bitcast %"class.std::allocator.7"* %this1 to %"class.__gnu_cxx::new_allocator.8"*
call void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEEC2Ev(%"class.__gnu_cxx::new_allocator.8"* %1) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEEC2Ev(%"class.__gnu_cxx::new_allocator.8"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.8"*, align 8
store %"class.__gnu_cxx::new_allocator.8"* %this, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.8"*, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt4pairIKhSt6vectorIbSaIbEEED2Ev(%"struct.std::pair"* %this) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::pair"* %this, %"struct.std::pair"** %this.addr, align 8
%this1 = load %"struct.std::pair"*, %"struct.std::pair"** %this.addr, align 8
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 1
call void @_ZNSt6vectorIbSaIbEED2Ev(%"class.std::vector.0"* %second)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::pair"* @_ZSt11__addressofISt4pairIKhSt6vectorIbSaIbEEEEPT_RS6_(%"struct.std::pair"* dereferenceable(48) %__r) #6 comdat {
entry:
%__r.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::pair"* %__r, %"struct.std::pair"** %__r.addr, align 8
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__r.addr, align 8
ret %"struct.std::pair"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.__gnu_cxx::new_allocator.8"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.8"*, align 8
store %"class.__gnu_cxx::new_allocator.8"* %this, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.8"*, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE10deallocateERS9_PS8_m(%"class.std::allocator.4"* dereferenceable(1) %__a, %"struct.std::_Rb_tree_node"* %__p, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.4"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator.4"* %__a, %"class.std::allocator.4"** %__a.addr, align 8
store %"struct.std::_Rb_tree_node"* %__p, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator.4"*, %"class.std::allocator.4"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator.4"* %0 to %"class.__gnu_cxx::new_allocator.5"*
%2 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%3 = load i64, i64* %__n.addr, align 8
call void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE10deallocateEPS8_m(%"class.__gnu_cxx::new_allocator.5"* %1, %"struct.std::_Rb_tree_node"* %2, i64 %3)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator.4"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"class.std::allocator.4"*
ret %"class.std::allocator.4"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE10deallocateEPS8_m(%"class.__gnu_cxx::new_allocator.5"* %this, %"struct.std::_Rb_tree_node"* %__p, i64 %0) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.5"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%.addr = alloca i64, align 8
store %"class.__gnu_cxx::new_allocator.5"* %this, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__p, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
store i64 %0, i64* %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.5"*, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__p.addr, align 8
%2 = bitcast %"struct.std::_Rb_tree_node"* %1 to i8*
call void @_ZdlPv(i8* %2) #3
ret void
}
; Function Attrs: noreturn nounwind
declare dso_local void @__assert_fail(i8*, i8*, i32, i8*) #5
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local float @_ZSt4ceilf(float %__x) #6 comdat {
entry:
%__x.addr = alloca float, align 4
store float %__x, float* %__x.addr, align 4
%0 = load float, float* %__x.addr, align 4
%1 = call float @llvm.ceil.f32(float %0)
ret float %1
}
; Function Attrs: nounwind readnone speculatable willreturn
declare float @llvm.ceil.f32(float) #13
; Function Attrs: noinline optnone uwtable
define internal void @_ZL21prescanArrayRecursivePjPKjii(i32* %outArray, i32* %inArray, i32 %numElements, i32 %level) #0 {
entry:
%outArray.addr = alloca i32*, align 8
%inArray.addr = alloca i32*, align 8
%numElements.addr = alloca i32, align 4
%level.addr = alloca i32, align 4
%blockSize = alloca i32, align 4
%numBlocks = alloca i32, align 4
%numThreads = alloca i32, align 4
%numEltsPerBlock = alloca i32, align 4
%numEltsLastBlock = alloca i32, align 4
%numThreadsLastBlock = alloca i32, align 4
%np2LastBlock = alloca i32, align 4
%sharedMemLastBlock = alloca i32, align 4
%extraSpace = alloca i32, align 4
%extraSpace39 = alloca i32, align 4
%sharedMemSize = alloca i32, align 4
%grid = alloca %struct.dim3, align 4
%threads = alloca %struct.dim3, align 4
%err = alloca i32, align 4
%agg.tmp = alloca %struct.dim3, align 4
%agg.tmp60 = alloca %struct.dim3, align 4
%agg.tmp.coerce = alloca { i64, i32 }, align 4
%agg.tmp60.coerce = alloca { i64, i32 }, align 4
%err64 = alloca i32, align 4
%agg.tmp73 = alloca %struct.dim3, align 4
%agg.tmp74 = alloca %struct.dim3, align 4
%agg.tmp73.coerce = alloca { i64, i32 }, align 4
%agg.tmp74.coerce = alloca { i64, i32 }, align 4
%err84 = alloca i32, align 4
%agg.tmp97 = alloca %struct.dim3, align 4
%agg.tmp98 = alloca %struct.dim3, align 4
%agg.tmp97.coerce = alloca { i64, i32 }, align 4
%agg.tmp98.coerce = alloca { i64, i32 }, align 4
%err107 = alloca i32, align 4
%agg.tmp116 = alloca %struct.dim3, align 4
%agg.tmp117 = alloca %struct.dim3, align 4
%agg.tmp116.coerce = alloca { i64, i32 }, align 4
%agg.tmp117.coerce = alloca { i64, i32 }, align 4
%err127 = alloca i32, align 4
%agg.tmp138 = alloca %struct.dim3, align 4
%agg.tmp139 = alloca %struct.dim3, align 4
%agg.tmp138.coerce = alloca { i64, i32 }, align 4
%agg.tmp139.coerce = alloca { i64, i32 }, align 4
%err146 = alloca i32, align 4
%agg.tmp154 = alloca %struct.dim3, align 4
%agg.tmp155 = alloca %struct.dim3, align 4
%agg.tmp154.coerce = alloca { i64, i32 }, align 4
%agg.tmp155.coerce = alloca { i64, i32 }, align 4
%err161 = alloca i32, align 4
store i32* %outArray, i32** %outArray.addr, align 8
store i32* %inArray, i32** %inArray.addr, align 8
store i32 %numElements, i32* %numElements.addr, align 4
store i32 %level, i32* %level.addr, align 4
store i32 256, i32* %blockSize, align 4
%0 = load i32, i32* %numElements.addr, align 4
%conv = sitofp i32 %0 to float
%1 = load i32, i32* %blockSize, align 4
%conv1 = uitofp i32 %1 to float
%mul = fmul contract float 2.000000e+00, %conv1
%div = fdiv float %conv, %mul
%call = call float @_ZSt4ceilf(float %div)
%conv2 = fptosi float %call to i32
%cmp = icmp sgt i32 1, %conv2
br i1 %cmp, label %cond.true, label %cond.false
cond.true: ; preds = %entry
br label %cond.end
cond.false: ; preds = %entry
%2 = load i32, i32* %numElements.addr, align 4
%conv3 = sitofp i32 %2 to float
%3 = load i32, i32* %blockSize, align 4
%conv4 = uitofp i32 %3 to float
%mul5 = fmul contract float 2.000000e+00, %conv4
%div6 = fdiv float %conv3, %mul5
%call7 = call float @_ZSt4ceilf(float %div6)
%conv8 = fptosi float %call7 to i32
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i32 [ 1, %cond.true ], [ %conv8, %cond.false ]
store i32 %cond, i32* %numBlocks, align 4
%4 = load i32, i32* %numBlocks, align 4
%cmp9 = icmp ugt i32 %4, 1
br i1 %cmp9, label %if.then, label %if.else
if.then: ; preds = %cond.end
%5 = load i32, i32* %blockSize, align 4
store i32 %5, i32* %numThreads, align 4
br label %if.end15
if.else: ; preds = %cond.end
%6 = load i32, i32* %numElements.addr, align 4
%call10 = call zeroext i1 @_Z12isPowerOfTwoi(i32 %6)
br i1 %call10, label %if.then11, label %if.else13
if.then11: ; preds = %if.else
%7 = load i32, i32* %numElements.addr, align 4
%div12 = sdiv i32 %7, 2
store i32 %div12, i32* %numThreads, align 4
br label %if.end
if.else13: ; preds = %if.else
%8 = load i32, i32* %numElements.addr, align 4
%call14 = call i32 @_Z9floorPow2i(i32 %8)
store i32 %call14, i32* %numThreads, align 4
br label %if.end
if.end: ; preds = %if.else13, %if.then11
br label %if.end15
if.end15: ; preds = %if.end, %if.then
%9 = load i32, i32* %numThreads, align 4
%mul16 = mul i32 %9, 2
store i32 %mul16, i32* %numEltsPerBlock, align 4
%10 = load i32, i32* %numElements.addr, align 4
%11 = load i32, i32* %numBlocks, align 4
%sub = sub i32 %11, 1
%12 = load i32, i32* %numEltsPerBlock, align 4
%mul17 = mul i32 %sub, %12
%sub18 = sub i32 %10, %mul17
store i32 %sub18, i32* %numEltsLastBlock, align 4
%13 = load i32, i32* %numEltsLastBlock, align 4
%div19 = udiv i32 %13, 2
%cmp20 = icmp ugt i32 1, %div19
br i1 %cmp20, label %cond.true21, label %cond.false22
cond.true21: ; preds = %if.end15
br label %cond.end24
cond.false22: ; preds = %if.end15
%14 = load i32, i32* %numEltsLastBlock, align 4
%div23 = udiv i32 %14, 2
br label %cond.end24
cond.end24: ; preds = %cond.false22, %cond.true21
%cond25 = phi i32 [ 1, %cond.true21 ], [ %div23, %cond.false22 ]
store i32 %cond25, i32* %numThreadsLastBlock, align 4
store i32 0, i32* %np2LastBlock, align 4
store i32 0, i32* %sharedMemLastBlock, align 4
%15 = load i32, i32* %numEltsLastBlock, align 4
%16 = load i32, i32* %numEltsPerBlock, align 4
%cmp26 = icmp ne i32 %15, %16
br i1 %cmp26, label %if.then27, label %if.end38
if.then27: ; preds = %cond.end24
store i32 1, i32* %np2LastBlock, align 4
%17 = load i32, i32* %numEltsLastBlock, align 4
%call28 = call zeroext i1 @_Z12isPowerOfTwoi(i32 %17)
br i1 %call28, label %if.end31, label %if.then29
if.then29: ; preds = %if.then27
%18 = load i32, i32* %numEltsLastBlock, align 4
%call30 = call i32 @_Z9floorPow2i(i32 %18)
store i32 %call30, i32* %numThreadsLastBlock, align 4
br label %if.end31
if.end31: ; preds = %if.then29, %if.then27
%19 = load i32, i32* %numThreadsLastBlock, align 4
%mul32 = mul i32 2, %19
%div33 = udiv i32 %mul32, 16
store i32 %div33, i32* %extraSpace, align 4
%20 = load i32, i32* %numThreadsLastBlock, align 4
%mul34 = mul i32 2, %20
%21 = load i32, i32* %extraSpace, align 4
%add = add i32 %mul34, %21
%conv35 = zext i32 %add to i64
%mul36 = mul i64 4, %conv35
%conv37 = trunc i64 %mul36 to i32
store i32 %conv37, i32* %sharedMemLastBlock, align 4
br label %if.end38
if.end38: ; preds = %if.end31, %cond.end24
%22 = load i32, i32* %numEltsPerBlock, align 4
%div40 = udiv i32 %22, 16
store i32 %div40, i32* %extraSpace39, align 4
%23 = load i32, i32* %numEltsPerBlock, align 4
%24 = load i32, i32* %extraSpace39, align 4
%add41 = add i32 %23, %24
%conv42 = zext i32 %add41 to i64
%mul43 = mul i64 4, %conv42
%conv44 = trunc i64 %mul43 to i32
store i32 %conv44, i32* %sharedMemSize, align 4
%25 = load i32, i32* %numBlocks, align 4
%26 = load i32, i32* %np2LastBlock, align 4
%sub45 = sub i32 %25, %26
%cmp46 = icmp ugt i32 1, %sub45
br i1 %cmp46, label %cond.true47, label %cond.false48
cond.true47: ; preds = %if.end38
br label %cond.end50
cond.false48: ; preds = %if.end38
%27 = load i32, i32* %numBlocks, align 4
%28 = load i32, i32* %np2LastBlock, align 4
%sub49 = sub i32 %27, %28
br label %cond.end50
cond.end50: ; preds = %cond.false48, %cond.true47
%cond51 = phi i32 [ 1, %cond.true47 ], [ %sub49, %cond.false48 ]
call void @_ZN4dim3C2Ejjj(%struct.dim3* %grid, i32 %cond51, i32 1, i32 1)
%29 = load i32, i32* %numThreads, align 4
call void @_ZN4dim3C2Ejjj(%struct.dim3* %threads, i32 %29, i32 1, i32 1)
%call52 = call i32 @cudaGetLastError()
store i32 %call52, i32* %err, align 4
%30 = load i32, i32* %err, align 4
%cmp53 = icmp ne i32 0, %30
br i1 %cmp53, label %if.then54, label %if.end57
if.then54: ; preds = %cond.end50
%31 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%32 = load i32, i32* %err, align 4
%call55 = call i8* @cudaGetErrorString(i32 %32)
%call56 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %31, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 163, i8* %call55)
call void @exit(i32 1) #16
unreachable
if.end57: ; preds = %cond.end50
%33 = load i32, i32* %numBlocks, align 4
%cmp58 = icmp ugt i32 %33, 1
br i1 %cmp58, label %if.then59, label %if.else135
if.then59: ; preds = %if.end57
%34 = bitcast %struct.dim3* %agg.tmp to i8*
%35 = bitcast %struct.dim3* %grid to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %34, i8* align 4 %35, i64 12, i1 false)
%36 = bitcast %struct.dim3* %agg.tmp60 to i8*
%37 = bitcast %struct.dim3* %threads to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %36, i8* align 4 %37, i64 12, i1 false)
%38 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
%39 = bitcast %struct.dim3* %agg.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %38, i8* align 4 %39, i64 12, i1 false)
%40 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
%41 = load i64, i64* %40, align 4
%42 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
%43 = load i32, i32* %42, align 4
%44 = bitcast { i64, i32 }* %agg.tmp60.coerce to i8*
%45 = bitcast %struct.dim3* %agg.tmp60 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %44, i8* align 4 %45, i64 12, i1 false)
%46 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp60.coerce, i32 0, i32 0
%47 = load i64, i64* %46, align 4
%48 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp60.coerce, i32 0, i32 1
%49 = load i32, i32* %48, align 4
%call61 = call i32 @__cudaPushCallConfiguration(i64 %41, i32 %43, i64 %47, i32 %49, i64 0, i8* null)
%tobool = icmp ne i32 %call61, 0
br i1 %tobool, label %kcall.end, label %kcall.configok
kcall.configok: ; preds = %if.then59
%50 = load i32*, i32** %outArray.addr, align 8
%51 = load i32*, i32** %inArray.addr, align 8
%52 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%53 = load i32, i32* %level.addr, align 4
%idxprom = sext i32 %53 to i64
%arrayidx = getelementptr inbounds i32*, i32** %52, i64 %idxprom
%54 = load i32*, i32** %arrayidx, align 8
%55 = load i32, i32* %numThreads, align 4
%mul62 = mul i32 %55, 2
call void @_ZL7prescanILb1ELb0EEvPjPKjS0_iii(i32* %50, i32* %51, i32* %54, i32 %mul62, i32 0, i32 0)
br label %kcall.end
kcall.end: ; preds = %kcall.configok, %if.then59
%call63 = call i32 @cudaThreadSynchronize()
%call65 = call i32 @cudaGetLastError()
store i32 %call65, i32* %err64, align 4
%56 = load i32, i32* %err64, align 4
%cmp66 = icmp ne i32 0, %56
br i1 %cmp66, label %if.then67, label %if.end70
if.then67: ; preds = %kcall.end
%57 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%58 = load i32, i32* %err64, align 4
%call68 = call i8* @cudaGetErrorString(i32 %58)
%call69 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %57, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 170, i8* %call68)
call void @exit(i32 1) #16
unreachable
if.end70: ; preds = %kcall.end
%59 = load i32, i32* %np2LastBlock, align 4
%tobool71 = icmp ne i32 %59, 0
br i1 %tobool71, label %if.then72, label %if.end91
if.then72: ; preds = %if.end70
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp73, i32 1, i32 1, i32 1)
%60 = load i32, i32* %numThreadsLastBlock, align 4
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp74, i32 %60, i32 1, i32 1)
%61 = bitcast { i64, i32 }* %agg.tmp73.coerce to i8*
%62 = bitcast %struct.dim3* %agg.tmp73 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %61, i8* align 4 %62, i64 12, i1 false)
%63 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp73.coerce, i32 0, i32 0
%64 = load i64, i64* %63, align 4
%65 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp73.coerce, i32 0, i32 1
%66 = load i32, i32* %65, align 4
%67 = bitcast { i64, i32 }* %agg.tmp74.coerce to i8*
%68 = bitcast %struct.dim3* %agg.tmp74 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %67, i8* align 4 %68, i64 12, i1 false)
%69 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp74.coerce, i32 0, i32 0
%70 = load i64, i64* %69, align 4
%71 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp74.coerce, i32 0, i32 1
%72 = load i32, i32* %71, align 4
%call75 = call i32 @__cudaPushCallConfiguration(i64 %64, i32 %66, i64 %70, i32 %72, i64 0, i8* null)
%tobool76 = icmp ne i32 %call75, 0
br i1 %tobool76, label %kcall.end82, label %kcall.configok77
kcall.configok77: ; preds = %if.then72
%73 = load i32*, i32** %outArray.addr, align 8
%74 = load i32*, i32** %inArray.addr, align 8
%75 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%76 = load i32, i32* %level.addr, align 4
%idxprom78 = sext i32 %76 to i64
%arrayidx79 = getelementptr inbounds i32*, i32** %75, i64 %idxprom78
%77 = load i32*, i32** %arrayidx79, align 8
%78 = load i32, i32* %numEltsLastBlock, align 4
%79 = load i32, i32* %numBlocks, align 4
%sub80 = sub i32 %79, 1
%80 = load i32, i32* %numElements.addr, align 4
%81 = load i32, i32* %numEltsLastBlock, align 4
%sub81 = sub i32 %80, %81
call void @_ZL7prescanILb1ELb1EEvPjPKjS0_iii(i32* %73, i32* %74, i32* %77, i32 %78, i32 %sub80, i32 %sub81)
br label %kcall.end82
kcall.end82: ; preds = %kcall.configok77, %if.then72
%call83 = call i32 @cudaThreadSynchronize()
%call85 = call i32 @cudaGetLastError()
store i32 %call85, i32* %err84, align 4
%82 = load i32, i32* %err84, align 4
%cmp86 = icmp ne i32 0, %82
br i1 %cmp86, label %if.then87, label %if.end90
if.then87: ; preds = %kcall.end82
%83 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%84 = load i32, i32* %err84, align 4
%call88 = call i8* @cudaGetErrorString(i32 %84)
%call89 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %83, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 176, i8* %call88)
call void @exit(i32 1) #16
unreachable
if.end90: ; preds = %kcall.end82
br label %if.end91
if.end91: ; preds = %if.end90, %if.end70
%85 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%86 = load i32, i32* %level.addr, align 4
%idxprom92 = sext i32 %86 to i64
%arrayidx93 = getelementptr inbounds i32*, i32** %85, i64 %idxprom92
%87 = load i32*, i32** %arrayidx93, align 8
%88 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%89 = load i32, i32* %level.addr, align 4
%idxprom94 = sext i32 %89 to i64
%arrayidx95 = getelementptr inbounds i32*, i32** %88, i64 %idxprom94
%90 = load i32*, i32** %arrayidx95, align 8
%91 = load i32, i32* %numBlocks, align 4
%92 = load i32, i32* %level.addr, align 4
%add96 = add nsw i32 %92, 1
call void @_ZL21prescanArrayRecursivePjPKjii(i32* %87, i32* %90, i32 %91, i32 %add96)
%93 = bitcast %struct.dim3* %agg.tmp97 to i8*
%94 = bitcast %struct.dim3* %grid to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %93, i8* align 4 %94, i64 12, i1 false)
%95 = bitcast %struct.dim3* %agg.tmp98 to i8*
%96 = bitcast %struct.dim3* %threads to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %95, i8* align 4 %96, i64 12, i1 false)
%97 = bitcast { i64, i32 }* %agg.tmp97.coerce to i8*
%98 = bitcast %struct.dim3* %agg.tmp97 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %97, i8* align 4 %98, i64 12, i1 false)
%99 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp97.coerce, i32 0, i32 0
%100 = load i64, i64* %99, align 4
%101 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp97.coerce, i32 0, i32 1
%102 = load i32, i32* %101, align 4
%103 = bitcast { i64, i32 }* %agg.tmp98.coerce to i8*
%104 = bitcast %struct.dim3* %agg.tmp98 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %103, i8* align 4 %104, i64 12, i1 false)
%105 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp98.coerce, i32 0, i32 0
%106 = load i64, i64* %105, align 4
%107 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp98.coerce, i32 0, i32 1
%108 = load i32, i32* %107, align 4
%call99 = call i32 @__cudaPushCallConfiguration(i64 %100, i32 %102, i64 %106, i32 %108, i64 0, i8* null)
%tobool100 = icmp ne i32 %call99, 0
br i1 %tobool100, label %kcall.end105, label %kcall.configok101
kcall.configok101: ; preds = %if.end91
%109 = load i32*, i32** %outArray.addr, align 8
%110 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%111 = load i32, i32* %level.addr, align 4
%idxprom102 = sext i32 %111 to i64
%arrayidx103 = getelementptr inbounds i32*, i32** %110, i64 %idxprom102
%112 = load i32*, i32** %arrayidx103, align 8
%113 = load i32, i32* %numElements.addr, align 4
%114 = load i32, i32* %numEltsLastBlock, align 4
%sub104 = sub i32 %113, %114
call void @_ZL10uniformAddPjS_iii(i32* %109, i32* %112, i32 %sub104, i32 0, i32 0)
br label %kcall.end105
kcall.end105: ; preds = %kcall.configok101, %if.end91
%call106 = call i32 @cudaThreadSynchronize()
%call108 = call i32 @cudaGetLastError()
store i32 %call108, i32* %err107, align 4
%115 = load i32, i32* %err107, align 4
%cmp109 = icmp ne i32 0, %115
br i1 %cmp109, label %if.then110, label %if.end113
if.then110: ; preds = %kcall.end105
%116 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%117 = load i32, i32* %err107, align 4
%call111 = call i8* @cudaGetErrorString(i32 %117)
%call112 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %116, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 190, i8* %call111)
call void @exit(i32 1) #16
unreachable
if.end113: ; preds = %kcall.end105
%118 = load i32, i32* %np2LastBlock, align 4
%tobool114 = icmp ne i32 %118, 0
br i1 %tobool114, label %if.then115, label %if.end134
if.then115: ; preds = %if.end113
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp116, i32 1, i32 1, i32 1)
%119 = load i32, i32* %numThreadsLastBlock, align 4
call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp117, i32 %119, i32 1, i32 1)
%120 = bitcast { i64, i32 }* %agg.tmp116.coerce to i8*
%121 = bitcast %struct.dim3* %agg.tmp116 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %120, i8* align 4 %121, i64 12, i1 false)
%122 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp116.coerce, i32 0, i32 0
%123 = load i64, i64* %122, align 4
%124 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp116.coerce, i32 0, i32 1
%125 = load i32, i32* %124, align 4
%126 = bitcast { i64, i32 }* %agg.tmp117.coerce to i8*
%127 = bitcast %struct.dim3* %agg.tmp117 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %126, i8* align 4 %127, i64 12, i1 false)
%128 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp117.coerce, i32 0, i32 0
%129 = load i64, i64* %128, align 4
%130 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp117.coerce, i32 0, i32 1
%131 = load i32, i32* %130, align 4
%call118 = call i32 @__cudaPushCallConfiguration(i64 %123, i32 %125, i64 %129, i32 %131, i64 0, i8* null)
%tobool119 = icmp ne i32 %call118, 0
br i1 %tobool119, label %kcall.end125, label %kcall.configok120
kcall.configok120: ; preds = %if.then115
%132 = load i32*, i32** %outArray.addr, align 8
%133 = load i32**, i32*** @_ZL15g_scanBlockSums, align 8
%134 = load i32, i32* %level.addr, align 4
%idxprom121 = sext i32 %134 to i64
%arrayidx122 = getelementptr inbounds i32*, i32** %133, i64 %idxprom121
%135 = load i32*, i32** %arrayidx122, align 8
%136 = load i32, i32* %numEltsLastBlock, align 4
%137 = load i32, i32* %numBlocks, align 4
%sub123 = sub i32 %137, 1
%138 = load i32, i32* %numElements.addr, align 4
%139 = load i32, i32* %numEltsLastBlock, align 4
%sub124 = sub i32 %138, %139
call void @_ZL10uniformAddPjS_iii(i32* %132, i32* %135, i32 %136, i32 %sub123, i32 %sub124)
br label %kcall.end125
kcall.end125: ; preds = %kcall.configok120, %if.then115
%call126 = call i32 @cudaThreadSynchronize()
%call128 = call i32 @cudaGetLastError()
store i32 %call128, i32* %err127, align 4
%140 = load i32, i32* %err127, align 4
%cmp129 = icmp ne i32 0, %140
br i1 %cmp129, label %if.then130, label %if.end133
if.then130: ; preds = %kcall.end125
%141 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%142 = load i32, i32* %err127, align 4
%call131 = call i8* @cudaGetErrorString(i32 %142)
%call132 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %141, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.22, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 196, i8* %call131)
call void @exit(i32 1) #16
unreachable
if.end133: ; preds = %kcall.end125
br label %if.end134
if.end134: ; preds = %if.end133, %if.end113
br label %if.end169
if.else135: ; preds = %if.end57
%143 = load i32, i32* %numElements.addr, align 4
%call136 = call zeroext i1 @_Z12isPowerOfTwoi(i32 %143)
br i1 %call136, label %if.then137, label %if.else153
if.then137: ; preds = %if.else135
%144 = bitcast %struct.dim3* %agg.tmp138 to i8*
%145 = bitcast %struct.dim3* %grid to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %144, i8* align 4 %145, i64 12, i1 false)
%146 = bitcast %struct.dim3* %agg.tmp139 to i8*
%147 = bitcast %struct.dim3* %threads to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %146, i8* align 4 %147, i64 12, i1 false)
%148 = bitcast { i64, i32 }* %agg.tmp138.coerce to i8*
%149 = bitcast %struct.dim3* %agg.tmp138 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %148, i8* align 4 %149, i64 12, i1 false)
%150 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp138.coerce, i32 0, i32 0
%151 = load i64, i64* %150, align 4
%152 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp138.coerce, i32 0, i32 1
%153 = load i32, i32* %152, align 4
%154 = bitcast { i64, i32 }* %agg.tmp139.coerce to i8*
%155 = bitcast %struct.dim3* %agg.tmp139 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %154, i8* align 4 %155, i64 12, i1 false)
%156 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp139.coerce, i32 0, i32 0
%157 = load i64, i64* %156, align 4
%158 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp139.coerce, i32 0, i32 1
%159 = load i32, i32* %158, align 4
%call140 = call i32 @__cudaPushCallConfiguration(i64 %151, i32 %153, i64 %157, i32 %159, i64 0, i8* null)
%tobool141 = icmp ne i32 %call140, 0
br i1 %tobool141, label %kcall.end144, label %kcall.configok142
kcall.configok142: ; preds = %if.then137
%160 = load i32*, i32** %outArray.addr, align 8
%161 = load i32*, i32** %inArray.addr, align 8
%162 = load i32, i32* %numThreads, align 4
%mul143 = mul i32 %162, 2
call void @_ZL7prescanILb0ELb0EEvPjPKjS0_iii(i32* %160, i32* %161, i32* null, i32 %mul143, i32 0, i32 0)
br label %kcall.end144
kcall.end144: ; preds = %kcall.configok142, %if.then137
%call145 = call i32 @cudaThreadSynchronize()
%call147 = call i32 @cudaGetLastError()
store i32 %call147, i32* %err146, align 4
%163 = load i32, i32* %err146, align 4
%cmp148 = icmp ne i32 0, %163
br i1 %cmp148, label %if.then149, label %if.end152
if.then149: ; preds = %kcall.end144
%164 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%165 = load i32, i32* %err146, align 4
%call150 = call i8* @cudaGetErrorString(i32 %165)
%call151 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %164, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.23, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 202, i8* %call150)
call void @exit(i32 1) #16
unreachable
if.end152: ; preds = %kcall.end144
br label %if.end168
if.else153: ; preds = %if.else135
%166 = bitcast %struct.dim3* %agg.tmp154 to i8*
%167 = bitcast %struct.dim3* %grid to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %166, i8* align 4 %167, i64 12, i1 false)
%168 = bitcast %struct.dim3* %agg.tmp155 to i8*
%169 = bitcast %struct.dim3* %threads to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %168, i8* align 4 %169, i64 12, i1 false)
%170 = bitcast { i64, i32 }* %agg.tmp154.coerce to i8*
%171 = bitcast %struct.dim3* %agg.tmp154 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %170, i8* align 4 %171, i64 12, i1 false)
%172 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp154.coerce, i32 0, i32 0
%173 = load i64, i64* %172, align 4
%174 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp154.coerce, i32 0, i32 1
%175 = load i32, i32* %174, align 4
%176 = bitcast { i64, i32 }* %agg.tmp155.coerce to i8*
%177 = bitcast %struct.dim3* %agg.tmp155 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %176, i8* align 4 %177, i64 12, i1 false)
%178 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp155.coerce, i32 0, i32 0
%179 = load i64, i64* %178, align 4
%180 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp155.coerce, i32 0, i32 1
%181 = load i32, i32* %180, align 4
%call156 = call i32 @__cudaPushCallConfiguration(i64 %173, i32 %175, i64 %179, i32 %181, i64 0, i8* null)
%tobool157 = icmp ne i32 %call156, 0
br i1 %tobool157, label %kcall.end159, label %kcall.configok158
kcall.configok158: ; preds = %if.else153
%182 = load i32*, i32** %outArray.addr, align 8
%183 = load i32*, i32** %inArray.addr, align 8
%184 = load i32, i32* %numElements.addr, align 4
call void @_ZL7prescanILb0ELb1EEvPjPKjS0_iii(i32* %182, i32* %183, i32* null, i32 %184, i32 0, i32 0)
br label %kcall.end159
kcall.end159: ; preds = %kcall.configok158, %if.else153
%call160 = call i32 @cudaThreadSynchronize()
%call162 = call i32 @cudaGetLastError()
store i32 %call162, i32* %err161, align 4
%185 = load i32, i32* %err161, align 4
%cmp163 = icmp ne i32 0, %185
br i1 %cmp163, label %if.then164, label %if.end167
if.then164: ; preds = %kcall.end159
%186 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
%187 = load i32, i32* %err161, align 4
%call165 = call i8* @cudaGetErrorString(i32 %187)
%call166 = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %186, i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.11, i64 0, i64 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.24, i64 0, i64 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i64 0, i64 0), i32 207, i8* %call165)
call void @exit(i32 1) #16
unreachable
if.end167: ; preds = %kcall.end159
br label %if.end168
if.end168: ; preds = %if.end167, %if.end152
br label %if.end169
if.end169: ; preds = %if.end168, %if.end134
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_Z12isPowerOfTwoi(i32 %n) #6 comdat {
entry:
%n.addr = alloca i32, align 4
store i32 %n, i32* %n.addr, align 4
%0 = load i32, i32* %n.addr, align 4
%1 = load i32, i32* %n.addr, align 4
%sub = sub nsw i32 %1, 1
%and = and i32 %0, %sub
%cmp = icmp eq i32 %and, 0
ret i1 %cmp
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i32 @_Z9floorPow2i(i32 %n) #0 comdat {
entry:
%n.addr = alloca i32, align 4
%exp = alloca i32, align 4
store i32 %n, i32* %n.addr, align 4
%0 = load i32, i32* %n.addr, align 4
%conv = sitofp i32 %0 to float
%call = call float @_ZSt5frexpfPi(float %conv, i32* %exp)
%1 = load i32, i32* %exp, align 4
%sub = sub nsw i32 %1, 1
%shl = shl i32 1, %sub
ret i32 %shl
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL7prescanILb1ELb0EEvPjPKjS0_iii(i32* %g_odata, i32* %g_idata, i32* %g_blockSums, i32 %n, i32 %blockIndex, i32 %baseIndex) #0 {
entry:
%g_odata.addr = alloca i32*, align 8
%g_idata.addr = alloca i32*, align 8
%g_blockSums.addr = alloca i32*, align 8
%n.addr = alloca i32, align 4
%blockIndex.addr = alloca i32, align 4
%baseIndex.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %g_odata, i32** %g_odata.addr, align 8
store i32* %g_idata, i32** %g_idata.addr, align 8
store i32* %g_blockSums, i32** %g_blockSums.addr, align 8
store i32 %n, i32* %n.addr, align 4
store i32 %blockIndex, i32* %blockIndex.addr, align 4
store i32 %baseIndex, i32* %baseIndex.addr, align 4
%kernel_args = alloca i8*, i64 6, align 16
%0 = bitcast i32** %g_odata.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %g_idata.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %g_blockSums.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32* %n.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %blockIndex.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = bitcast i32* %baseIndex.addr to i8*
%11 = getelementptr i8*, i8** %kernel_args, i32 5
store i8* %10, i8** %11
%12 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%13 = load i64, i64* %shmem_size, align 8
%14 = load i8*, i8** %stream, align 8
%15 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%16 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %15, i8* align 8 %16, i64 12, i1 false)
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%18 = load i64, i64* %17, align 8
%19 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%20 = load i32, i32* %19, align 8
%21 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%22 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 12, i1 false)
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%24 = load i64, i64* %23, align 8
%25 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%26 = load i32, i32* %25, align 8
%27 = bitcast i8* %14 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb1ELb0EEvPjPKjS0_iii to i8*), i64 %18, i32 %20, i64 %24, i32 %26, i8** %kernel_args, i64 %13, %struct.CUstream_st* %27)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL7prescanILb1ELb1EEvPjPKjS0_iii(i32* %g_odata, i32* %g_idata, i32* %g_blockSums, i32 %n, i32 %blockIndex, i32 %baseIndex) #0 {
entry:
%g_odata.addr = alloca i32*, align 8
%g_idata.addr = alloca i32*, align 8
%g_blockSums.addr = alloca i32*, align 8
%n.addr = alloca i32, align 4
%blockIndex.addr = alloca i32, align 4
%baseIndex.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %g_odata, i32** %g_odata.addr, align 8
store i32* %g_idata, i32** %g_idata.addr, align 8
store i32* %g_blockSums, i32** %g_blockSums.addr, align 8
store i32 %n, i32* %n.addr, align 4
store i32 %blockIndex, i32* %blockIndex.addr, align 4
store i32 %baseIndex, i32* %baseIndex.addr, align 4
%kernel_args = alloca i8*, i64 6, align 16
%0 = bitcast i32** %g_odata.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %g_idata.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %g_blockSums.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32* %n.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %blockIndex.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = bitcast i32* %baseIndex.addr to i8*
%11 = getelementptr i8*, i8** %kernel_args, i32 5
store i8* %10, i8** %11
%12 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%13 = load i64, i64* %shmem_size, align 8
%14 = load i8*, i8** %stream, align 8
%15 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%16 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %15, i8* align 8 %16, i64 12, i1 false)
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%18 = load i64, i64* %17, align 8
%19 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%20 = load i32, i32* %19, align 8
%21 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%22 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 12, i1 false)
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%24 = load i64, i64* %23, align 8
%25 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%26 = load i32, i32* %25, align 8
%27 = bitcast i8* %14 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb1ELb1EEvPjPKjS0_iii to i8*), i64 %18, i32 %20, i64 %24, i32 %26, i8** %kernel_args, i64 %13, %struct.CUstream_st* %27)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL10uniformAddPjS_iii(i32* %g_data, i32* %uniforms, i32 %n, i32 %blockOffset, i32 %baseIndex) #0 {
entry:
%g_data.addr = alloca i32*, align 8
%uniforms.addr = alloca i32*, align 8
%n.addr = alloca i32, align 4
%blockOffset.addr = alloca i32, align 4
%baseIndex.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %g_data, i32** %g_data.addr, align 8
store i32* %uniforms, i32** %uniforms.addr, align 8
store i32 %n, i32* %n.addr, align 4
store i32 %blockOffset, i32* %blockOffset.addr, align 4
store i32 %baseIndex, i32* %baseIndex.addr, align 4
%kernel_args = alloca i8*, i64 5, align 16
%0 = bitcast i32** %g_data.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %uniforms.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32* %n.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32* %blockOffset.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %baseIndex.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%11 = load i64, i64* %shmem_size, align 8
%12 = load i8*, i8** %stream, align 8
%13 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%14 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 12, i1 false)
%15 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%16 = load i64, i64* %15, align 8
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%18 = load i32, i32* %17, align 8
%19 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%20 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %19, i8* align 8 %20, i64 12, i1 false)
%21 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%22 = load i64, i64* %21, align 8
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast i8* %12 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32, i32, i32)* @_ZL10uniformAddPjS_iii to i8*), i64 %16, i32 %18, i64 %22, i32 %24, i8** %kernel_args, i64 %11, %struct.CUstream_st* %25)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL7prescanILb0ELb0EEvPjPKjS0_iii(i32* %g_odata, i32* %g_idata, i32* %g_blockSums, i32 %n, i32 %blockIndex, i32 %baseIndex) #0 {
entry:
%g_odata.addr = alloca i32*, align 8
%g_idata.addr = alloca i32*, align 8
%g_blockSums.addr = alloca i32*, align 8
%n.addr = alloca i32, align 4
%blockIndex.addr = alloca i32, align 4
%baseIndex.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %g_odata, i32** %g_odata.addr, align 8
store i32* %g_idata, i32** %g_idata.addr, align 8
store i32* %g_blockSums, i32** %g_blockSums.addr, align 8
store i32 %n, i32* %n.addr, align 4
store i32 %blockIndex, i32* %blockIndex.addr, align 4
store i32 %baseIndex, i32* %baseIndex.addr, align 4
%kernel_args = alloca i8*, i64 6, align 16
%0 = bitcast i32** %g_odata.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %g_idata.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %g_blockSums.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32* %n.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %blockIndex.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = bitcast i32* %baseIndex.addr to i8*
%11 = getelementptr i8*, i8** %kernel_args, i32 5
store i8* %10, i8** %11
%12 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%13 = load i64, i64* %shmem_size, align 8
%14 = load i8*, i8** %stream, align 8
%15 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%16 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %15, i8* align 8 %16, i64 12, i1 false)
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%18 = load i64, i64* %17, align 8
%19 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%20 = load i32, i32* %19, align 8
%21 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%22 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 12, i1 false)
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%24 = load i64, i64* %23, align 8
%25 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%26 = load i32, i32* %25, align 8
%27 = bitcast i8* %14 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb0ELb0EEvPjPKjS0_iii to i8*), i64 %18, i32 %20, i64 %24, i32 %26, i8** %kernel_args, i64 %13, %struct.CUstream_st* %27)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define internal void @_ZL7prescanILb0ELb1EEvPjPKjS0_iii(i32* %g_odata, i32* %g_idata, i32* %g_blockSums, i32 %n, i32 %blockIndex, i32 %baseIndex) #0 {
entry:
%g_odata.addr = alloca i32*, align 8
%g_idata.addr = alloca i32*, align 8
%g_blockSums.addr = alloca i32*, align 8
%n.addr = alloca i32, align 4
%blockIndex.addr = alloca i32, align 4
%baseIndex.addr = alloca i32, align 4
%grid_dim = alloca %struct.dim3, align 8
%block_dim = alloca %struct.dim3, align 8
%shmem_size = alloca i64, align 8
%stream = alloca i8*, align 8
%grid_dim.coerce = alloca { i64, i32 }, align 8
%block_dim.coerce = alloca { i64, i32 }, align 8
store i32* %g_odata, i32** %g_odata.addr, align 8
store i32* %g_idata, i32** %g_idata.addr, align 8
store i32* %g_blockSums, i32** %g_blockSums.addr, align 8
store i32 %n, i32* %n.addr, align 4
store i32 %blockIndex, i32* %blockIndex.addr, align 4
store i32 %baseIndex, i32* %baseIndex.addr, align 4
%kernel_args = alloca i8*, i64 6, align 16
%0 = bitcast i32** %g_odata.addr to i8*
%1 = getelementptr i8*, i8** %kernel_args, i32 0
store i8* %0, i8** %1
%2 = bitcast i32** %g_idata.addr to i8*
%3 = getelementptr i8*, i8** %kernel_args, i32 1
store i8* %2, i8** %3
%4 = bitcast i32** %g_blockSums.addr to i8*
%5 = getelementptr i8*, i8** %kernel_args, i32 2
store i8* %4, i8** %5
%6 = bitcast i32* %n.addr to i8*
%7 = getelementptr i8*, i8** %kernel_args, i32 3
store i8* %6, i8** %7
%8 = bitcast i32* %blockIndex.addr to i8*
%9 = getelementptr i8*, i8** %kernel_args, i32 4
store i8* %8, i8** %9
%10 = bitcast i32* %baseIndex.addr to i8*
%11 = getelementptr i8*, i8** %kernel_args, i32 5
store i8* %10, i8** %11
%12 = call i32 @__cudaPopCallConfiguration(%struct.dim3* %grid_dim, %struct.dim3* %block_dim, i64* %shmem_size, i8** %stream)
%13 = load i64, i64* %shmem_size, align 8
%14 = load i8*, i8** %stream, align 8
%15 = bitcast { i64, i32 }* %grid_dim.coerce to i8*
%16 = bitcast %struct.dim3* %grid_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %15, i8* align 8 %16, i64 12, i1 false)
%17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 0
%18 = load i64, i64* %17, align 8
%19 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %grid_dim.coerce, i32 0, i32 1
%20 = load i32, i32* %19, align 8
%21 = bitcast { i64, i32 }* %block_dim.coerce to i8*
%22 = bitcast %struct.dim3* %block_dim to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 12, i1 false)
%23 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 0
%24 = load i64, i64* %23, align 8
%25 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %block_dim.coerce, i32 0, i32 1
%26 = load i32, i32* %25, align 8
%27 = bitcast i8* %14 to %struct.CUstream_st*
%call = call i32 @cudaLaunchKernel(i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb0ELb1EEvPjPKjS0_iii to i8*), i64 %18, i32 %20, i64 %24, i32 %26, i8** %kernel_args, i64 %13, %struct.CUstream_st* %27)
br label %setup.end
setup.end: ; preds = %entry
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local float @_ZSt5frexpfPi(float %__x, i32* %__exp) #6 comdat {
entry:
%__x.addr = alloca float, align 4
%__exp.addr = alloca i32*, align 8
store float %__x, float* %__x.addr, align 4
store i32* %__exp, i32** %__exp.addr, align 8
%0 = load float, float* %__x.addr, align 4
%1 = load i32*, i32** %__exp.addr, align 8
%call = call float @frexpf(float %0, i32* %1) #3
ret float %call
}
; Function Attrs: nounwind
declare dso_local float @frexpf(float, i32*) #11
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2Ev(%"struct.std::_Vector_base"* %this) unnamed_addr #0 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
%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
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, align 8
store %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1 to %"class.std::allocator"*
call void @_ZNSaIP5INodeEC2Ev(%"class.std::allocator"* %0) #3
%_M_start = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 0
store %class.INode** null, %class.INode*** %_M_start, align 8
%_M_finish = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 1
store %class.INode** null, %class.INode*** %_M_finish, align 8
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 2
store %class.INode** null, %class.INode*** %_M_end_of_storage, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaIP5INodeEC2Ev(%"class.std::allocator"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator"*, align 8
store %"class.std::allocator"* %this, %"class.std::allocator"** %this.addr, align 8
%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_allocatorIP5INodeEC2Ev(%"class.__gnu_cxx::new_allocator"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeEC2Ev(%"class.__gnu_cxx::new_allocator"* %this) unnamed_addr #6 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
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt8_DestroyIPP5INodeS1_EvT_S3_RSaIT0_E(%class.INode** %__first, %class.INode** %__last, %"class.std::allocator"* dereferenceable(1) %0) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%.addr = alloca %"class.std::allocator"*, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %"class.std::allocator"* %0, %"class.std::allocator"** %.addr, align 8
%1 = load %class.INode**, %class.INode*** %__first.addr, align 8
%2 = load %class.INode**, %class.INode*** %__last.addr, align 8
call void @_ZSt8_DestroyIPP5INodeEvT_S3_(%class.INode** %1, %class.INode** %2)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %this) #6 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
%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<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl to %"class.std::allocator"*
ret %"class.std::allocator"* %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EED2Ev(%"struct.std::_Vector_base"* %this) unnamed_addr #0 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
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_start, align 8
%_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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2, i32 0, i32 2
%1 = load %class.INode**, %class.INode*** %_M_end_of_storage, align 8
%_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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl3, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %_M_start4, align 8
%sub.ptr.lhs.cast = ptrtoint %class.INode** %1 to i64
%sub.ptr.rhs.cast = ptrtoint %class.INode** %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_baseIP5INodeSaIS1_EE13_M_deallocateEPS1_m(%"struct.std::_Vector_base"* %this1, %class.INode** %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 @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implD2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl5) #3
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
%_M_impl6 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implD2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl6) #3
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.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val7
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt8_DestroyIPP5INodeEvT_S3_(%class.INode** %__first, %class.INode** %__last) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
call void @_ZNSt12_Destroy_auxILb1EE9__destroyIPP5INodeEEvT_S5_(%class.INode** %0, %class.INode** %1)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Destroy_auxILb1EE9__destroyIPP5INodeEEvT_S5_(%class.INode** %0, %class.INode** %1) #6 comdat align 2 {
entry:
%.addr = alloca %class.INode**, align 8
%.addr1 = alloca %class.INode**, align 8
store %class.INode** %0, %class.INode*** %.addr, align 8
store %class.INode** %1, %class.INode*** %.addr1, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE13_M_deallocateEPS1_m(%"struct.std::_Vector_base"* %this, %class.INode** %__p, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base"*, align 8
%__p.addr = alloca %class.INode**, align 8
%__n.addr = alloca i64, align 8
store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
%0 = load %class.INode**, %class.INode*** %__p.addr, align 8
%tobool = icmp ne %class.INode** %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<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl to %"class.std::allocator"*
%2 = load %class.INode**, %class.INode*** %__p.addr, align 8
%3 = load i64, i64* %__n.addr, align 8
call void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE10deallocateERS3_PS2_m(%"class.std::allocator"* dereferenceable(1) %1, %class.INode** %2, i64 %3)
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implD2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, align 8
store %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1 to %"class.std::allocator"*
call void @_ZNSaIP5INodeED2Ev(%"class.std::allocator"* %0) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE10deallocateERS3_PS2_m(%"class.std::allocator"* dereferenceable(1) %__a, %class.INode** %__p, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator"* %0 to %"class.__gnu_cxx::new_allocator"*
%2 = load %class.INode**, %class.INode*** %__p.addr, align 8
%3 = load i64, i64* %__n.addr, align 8
call void @_ZN9__gnu_cxx13new_allocatorIP5INodeE10deallocateEPS2_m(%"class.__gnu_cxx::new_allocator"* %1, %class.INode** %2, i64 %3)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeE10deallocateEPS2_m(%"class.__gnu_cxx::new_allocator"* %this, %class.INode** %__p, i64 %0) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
%.addr = alloca i64, align 8
store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
store i64 %0, i64* %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
%1 = load %class.INode**, %class.INode*** %__p.addr, align 8
%2 = bitcast %class.INode** %1 to i8*
call void @_ZdlPv(i8* %2) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaIP5INodeED2Ev(%"class.std::allocator"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator"*, align 8
store %"class.std::allocator"* %this, %"class.std::allocator"** %this.addr, align 8
%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_allocatorIP5INodeED2Ev(%"class.__gnu_cxx::new_allocator"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeED2Ev(%"class.__gnu_cxx::new_allocator"* %this) unnamed_addr #6 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
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EEC2ERKS3_(%"class.std::vector"* %this, %"class.std::vector"* dereferenceable(24) %__x) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
%__x.addr = alloca %"class.std::vector"*, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%agg.tmp5 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
store %"class.std::vector"* %__x, %"class.std::vector"** %__x.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%1 = load %"class.std::vector"*, %"class.std::vector"** %__x.addr, align 8
%call = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %1)
%2 = load %"class.std::vector"*, %"class.std::vector"** %__x.addr, align 8
%3 = bitcast %"class.std::vector"* %2 to %"struct.std::_Vector_base"*
%call2 = call dereferenceable(1) %"class.std::allocator"* @_ZNKSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %3)
%call3 = call dereferenceable(1) %"class.std::allocator"* @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE17_S_select_on_copyERKS3_(%"class.std::allocator"* dereferenceable(1) %call2)
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2EmRKS2_(%"struct.std::_Vector_base"* %0, i64 %call, %"class.std::allocator"* dereferenceable(1) %call3)
%4 = load %"class.std::vector"*, %"class.std::vector"** %__x.addr, align 8
%call4 = invoke %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %4)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
store %class.INode** %call4, %class.INode*** %coerce.dive, align 8
%5 = load %"class.std::vector"*, %"class.std::vector"** %__x.addr, align 8
%call7 = invoke %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %5)
to label %invoke.cont6 unwind label %lpad
invoke.cont6: ; preds = %invoke.cont
%coerce.dive8 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp5, i32 0, i32 0
store %class.INode** %call7, %class.INode*** %coerce.dive8, align 8
%6 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %6, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
%7 = load %class.INode**, %class.INode*** %_M_start, align 8
%8 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call10 = invoke dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %8)
to label %invoke.cont9 unwind label %lpad
invoke.cont9: ; preds = %invoke.cont6
%coerce.dive11 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%9 = load %class.INode**, %class.INode*** %coerce.dive11, align 8
%coerce.dive12 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp5, i32 0, i32 0
%10 = load %class.INode**, %class.INode*** %coerce.dive12, align 8
%call14 = invoke %class.INode** @_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E(%class.INode** %9, %class.INode** %10, %class.INode** %7, %"class.std::allocator"* dereferenceable(1) %call10)
to label %invoke.cont13 unwind label %lpad
invoke.cont13: ; preds = %invoke.cont9
%11 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl15 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %11, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl15, i32 0, i32 1
store %class.INode** %call14, %class.INode*** %_M_finish, align 8
ret void
lpad: ; preds = %invoke.cont9, %invoke.cont6, %invoke.cont, %entry
%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
%15 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
invoke void @_ZNSt12_Vector_baseIP5INodeSaIS1_EED2Ev(%"struct.std::_Vector_base"* %15)
to label %invoke.cont16 unwind label %terminate.lpad
invoke.cont16: ; preds = %lpad
br label %eh.resume
eh.resume: ; preds = %invoke.cont16
%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.val17 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val17
terminate.lpad: ; preds = %lpad
%16 = landingpad { i8*, i32 }
catch i8* null
%17 = extractvalue { i8*, i32 } %16, 0
call void @__clang_call_terminate(i8* %17) #16
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt9make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %__first.coerce, %class.INode** %__last.coerce) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp = alloca %struct.NodeCmp, align 1
%__cmp = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter", align 1
%agg.tmp = alloca %struct.NodeCmp, align 1
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
call void @_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEC2ES2_(%"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__cmp)
%0 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2 to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3 to i8*
%3 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false)
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2, i32 0, i32 0
%4 = load %class.INode**, %class.INode*** %coerce.dive4, align 8
%coerce.dive5 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive5, align 8
call void @_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_RT0_(%class.INode** %4, %class.INode** %5, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__cmp)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
call void @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator"* %retval, %class.INode*** dereferenceable(8) %_M_start)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %retval, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 1
call void @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator"* %retval, %class.INode*** dereferenceable(8) %_M_finish)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %retval, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 1
%1 = load %class.INode**, %class.INode*** %_M_finish, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2, i32 0, i32 0
%3 = load %class.INode**, %class.INode*** %_M_start, align 8
%sub.ptr.lhs.cast = ptrtoint %class.INode** %1 to i64
%sub.ptr.rhs.cast = ptrtoint %class.INode** %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: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator"* @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE17_S_select_on_copyERKS3_(%"class.std::allocator"* dereferenceable(1) %__a) #6 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
ret %"class.std::allocator"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator"* @_ZNKSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %this) #6 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
%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<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl to %"class.std::allocator"*
ret %"class.std::allocator"* %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EEC2EmRKS2_(%"struct.std::_Vector_base"* %this, i64 %__n, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Vector_base"*, align 8
%__n.addr = alloca i64, align 8
%__a.addr = alloca %"class.std::allocator"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
%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 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2ERKS2_(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, %"class.std::allocator"* dereferenceable(1) %0)
%1 = load i64, i64* %__n.addr, align 8
invoke void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE17_M_create_storageEm(%"struct.std::_Vector_base"* %this1, i64 %1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
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
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implD2Ev(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl) #3
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: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_S3_ET0_T_SC_SB_RSaIT1_E(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result, %"class.std::allocator"* dereferenceable(1) %0) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__result.addr = alloca %class.INode**, align 8
%.addr = alloca %"class.std::allocator"*, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store %"class.std::allocator"* %0, %"class.std::allocator"** %.addr, align 8
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp to i8*
%2 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %1, i8* align 8 %2, i64 8, i1 false)
%3 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2 to i8*
%4 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false)
%5 = load %class.INode**, %class.INode*** %__result.addr, align 8
%coerce.dive3 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%6 = load %class.INode**, %class.INode*** %coerce.dive3, align 8
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2, i32 0, i32 0
%7 = load %class.INode**, %class.INode*** %coerce.dive4, align 8
%call = call %class.INode** @_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_(%class.INode** %6, %class.INode** %7, %class.INode** %5)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
call void @_ZN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS4_(%"class.__gnu_cxx::__normal_iterator.10"* %retval, %class.INode*** dereferenceable(8) %_M_start)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %retval, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 1
call void @_ZN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS4_(%"class.__gnu_cxx::__normal_iterator.10"* %retval, %class.INode*** dereferenceable(8) %_M_finish)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %retval, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE12_Vector_implC2ERKS2_(%"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, align 8
%__a.addr = alloca %"class.std::allocator"*, align 8
store %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
%this1 = load %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"*, %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1 to %"class.std::allocator"*
%1 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
call void @_ZNSaIP5INodeEC2ERKS1_(%"class.std::allocator"* %0, %"class.std::allocator"* dereferenceable(1) %1) #3
%_M_start = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 0
store %class.INode** null, %class.INode*** %_M_start, align 8
%_M_finish = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 1
store %class.INode** null, %class.INode*** %_M_finish, align 8
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %this1, i32 0, i32 2
store %class.INode** null, %class.INode*** %_M_end_of_storage, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE17_M_create_storageEm(%"struct.std::_Vector_base"* %this, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base"*, align 8
%__n.addr = alloca i64, align 8
store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
%0 = load i64, i64* %__n.addr, align 8
%call = call %class.INode** @_ZNSt12_Vector_baseIP5INodeSaIS1_EE11_M_allocateEm(%"struct.std::_Vector_base"* %this1, i64 %0)
%_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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 0
store %class.INode** %call, %class.INode*** %_M_start, align 8
%_M_impl2 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
%_M_start3 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2, i32 0, i32 0
%1 = load %class.INode**, %class.INode*** %_M_start3, align 8
%_M_impl4 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl4, i32 0, i32 1
store %class.INode** %1, %class.INode*** %_M_finish, align 8
%_M_impl5 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
%_M_start6 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl5, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %_M_start6, align 8
%3 = load i64, i64* %__n.addr, align 8
%add.ptr = getelementptr inbounds %class.INode*, %class.INode** %2, i64 %3
%_M_impl7 = 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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl7, i32 0, i32 2
store %class.INode** %add.ptr, %class.INode*** %_M_end_of_storage, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaIP5INodeEC2ERKS1_(%"class.std::allocator"* %this, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #6 comdat 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
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
%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_allocatorIP5INodeEC2ERKS3_(%"class.__gnu_cxx::new_allocator"* %0, %"class.__gnu_cxx::new_allocator"* dereferenceable(1) %2) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeEC2ERKS3_(%"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"* dereferenceable(1) %0) unnamed_addr #6 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
store %"class.__gnu_cxx::new_allocator"* %0, %"class.__gnu_cxx::new_allocator"** %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt12_Vector_baseIP5INodeSaIS1_EE11_M_allocateEm(%"struct.std::_Vector_base"* %this, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Vector_base"*, align 8
%__n.addr = alloca i64, align 8
store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
%0 = load i64, i64* %__n.addr, align 8
%cmp = icmp ne i64 %0, 0
br i1 %cmp, label %cond.true, label %cond.false
cond.true: ; 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<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl to %"class.std::allocator"*
%2 = load i64, i64* %__n.addr, align 8
%call = call %class.INode** @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8allocateERS3_m(%"class.std::allocator"* dereferenceable(1) %1, i64 %2)
br label %cond.end
cond.false: ; preds = %entry
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi %class.INode** [ %call, %cond.true ], [ null, %cond.false ]
ret %class.INode** %cond
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8allocateERS3_m(%"class.std::allocator"* dereferenceable(1) %__a, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator"* %0 to %"class.__gnu_cxx::new_allocator"*
%2 = load i64, i64* %__n.addr, align 8
%call = call %class.INode** @_ZN9__gnu_cxx13new_allocatorIP5INodeE8allocateEmPKv(%"class.__gnu_cxx::new_allocator"* %1, i64 %2, i8* null)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZN9__gnu_cxx13new_allocatorIP5INodeE8allocateEmPKv(%"class.__gnu_cxx::new_allocator"* %this, i64 %__n, i8* %0) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
%__n.addr = alloca i64, align 8
%.addr = alloca i8*, align 8
store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store i8* %0, i8** %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
%1 = load i64, i64* %__n.addr, align 8
%call = call i64 @_ZNK9__gnu_cxx13new_allocatorIP5INodeE8max_sizeEv(%"class.__gnu_cxx::new_allocator"* %this1) #3
%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() #19
unreachable
if.end: ; preds = %entry
%2 = load i64, i64* %__n.addr, align 8
%mul = mul i64 %2, 8
%call2 = call i8* @_Znwm(i64 %mul)
%3 = bitcast i8* %call2 to %class.INode**
ret %class.INode** %3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNK9__gnu_cxx13new_allocatorIP5INodeE8max_sizeEv(%"class.__gnu_cxx::new_allocator"* %this) #6 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
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
ret i64 2305843009213693951
}
; Function Attrs: noreturn
declare dso_local void @_ZSt17__throw_bad_allocv() #15
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__result.addr = alloca %class.INode**, align 8
%__assignable = alloca i8, align 1
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store i8 1, i8* %__assignable, align 1
%0 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2 to i8*
%3 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false)
%4 = load %class.INode**, %class.INode*** %__result.addr, align 8
%coerce.dive3 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive3, align 8
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2, i32 0, i32 0
%6 = load %class.INode**, %class.INode*** %coerce.dive4, align 8
%call = call %class.INode** @_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_(%class.INode** %5, %class.INode** %6, %class.INode** %4)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS5_SaIS5_EEEEPS5_EET0_T_SE_SD_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result) #0 comdat align 2 {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__result.addr = alloca %class.INode**, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2 to i8*
%3 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false)
%4 = load %class.INode**, %class.INode*** %__result.addr, align 8
%coerce.dive3 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive3, align 8
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2, i32 0, i32 0
%6 = load %class.INode**, %class.INode*** %coerce.dive4, align 8
%call = call %class.INode** @_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_(%class.INode** %5, %class.INode** %6, %class.INode** %4)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt4copyIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET0_T_SC_SB_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__result.addr = alloca %class.INode**, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp5 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp6 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2 to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%coerce.dive3 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp2, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive3, align 8
%call = call %class.INode** @_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEET_SA_(%class.INode** %2)
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive4, align 8
%3 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp6 to i8*
%4 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false)
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp6, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
%call8 = call %class.INode** @_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEET_SA_(%class.INode** %5)
%coerce.dive9 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp5, i32 0, i32 0
store %class.INode** %call8, %class.INode*** %coerce.dive9, align 8
%6 = load %class.INode**, %class.INode*** %__result.addr, align 8
%coerce.dive10 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%7 = load %class.INode**, %class.INode*** %coerce.dive10, align 8
%coerce.dive11 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp5, i32 0, i32 0
%8 = load %class.INode**, %class.INode*** %coerce.dive11, align 8
%call12 = call %class.INode** @_ZSt14__copy_move_a2ILb0EN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET1_T0_SC_SB_(%class.INode** %7, %class.INode** %8, %class.INode** %6)
ret %class.INode** %call12
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt14__copy_move_a2ILb0EN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEPS3_ET1_T0_SC_SB_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__result.addr = alloca %class.INode**, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%agg.tmp3 = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%coerce.dive2 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive2, align 8
%call = call %class.INode** @_ZSt12__niter_baseIPKP5INodeSt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE(%class.INode** %2)
%3 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp3 to i8*
%4 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false)
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %agg.tmp3, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive4, align 8
%call5 = call %class.INode** @_ZSt12__niter_baseIPKP5INodeSt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE(%class.INode** %5)
%6 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call6 = call %class.INode** @_ZSt12__niter_baseIPP5INodeET_S3_(%class.INode** %6)
%call7 = call %class.INode** @_ZSt13__copy_move_aILb0EPKP5INodePS1_ET1_T0_S6_S5_(%class.INode** %call, %class.INode** %call5, %class.INode** %call6)
ret %class.INode** %call7
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt12__miter_baseIN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS3_SaIS3_EEEEET_SA_(%class.INode** %__it.coerce) #6 comdat {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%__it = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__it, i32 0, i32 0
store %class.INode** %__it.coerce, %class.INode*** %coerce.dive, align 8
%0 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %retval to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator.10"* %__it to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %retval, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive1, align 8
ret %class.INode** %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt13__copy_move_aILb0EPKP5INodePS1_ET1_T0_S6_S5_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%__simple = alloca i8, align 1
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store i8 1, i8* %__simple, align 1
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call = call %class.INode** @_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIP5INodeEEPT_PKS5_S8_S6_(%class.INode** %0, %class.INode** %1, %class.INode** %2)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt12__niter_baseIPKP5INodeSt6vectorIS1_SaIS1_EEET_N9__gnu_cxx17__normal_iteratorIS7_T0_EE(%class.INode** %__it.coerce) #0 comdat {
entry:
%__it = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %__it, i32 0, i32 0
store %class.INode** %__it.coerce, %class.INode*** %coerce.dive, align 8
%call = call dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator.10"* %__it)
%0 = load %class.INode**, %class.INode*** %call, align 8
ret %class.INode** %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt12__niter_baseIPP5INodeET_S3_(%class.INode** %__it) #6 comdat {
entry:
%__it.addr = alloca %class.INode**, align 8
store %class.INode** %__it, %class.INode*** %__it.addr, align 8
%0 = load %class.INode**, %class.INode*** %__it.addr, align 8
ret %class.INode** %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIP5INodeEEPT_PKS5_S8_S6_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #6 comdat align 2 {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%_Num = alloca i64, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = load %class.INode**, %class.INode*** %__last.addr, align 8
%1 = load %class.INode**, %class.INode*** %__first.addr, align 8
%sub.ptr.lhs.cast = ptrtoint %class.INode** %0 to i64
%sub.ptr.rhs.cast = ptrtoint %class.INode** %1 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* %_Num, align 8
%2 = load i64, i64* %_Num, align 8
%tobool = icmp ne i64 %2, 0
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
%3 = load %class.INode**, %class.INode*** %__result.addr, align 8
%4 = bitcast %class.INode** %3 to i8*
%5 = load %class.INode**, %class.INode*** %__first.addr, align 8
%6 = bitcast %class.INode** %5 to i8*
%7 = load i64, i64* %_Num, align 8
%mul = mul i64 8, %7
call void @llvm.memmove.p0i8.p0i8.i64(i8* align 8 %4, i8* align 8 %6, i64 %mul, i1 false)
br label %if.end
if.end: ; preds = %if.then, %entry
%8 = load %class.INode**, %class.INode*** %__result.addr, align 8
%9 = load i64, i64* %_Num, align 8
%add.ptr = getelementptr inbounds %class.INode*, %class.INode** %8, i64 %9
ret %class.INode** %add.ptr
}
; Function Attrs: argmemonly nounwind willreturn
declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1 immarg) #4
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator.10"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator.10"*, align 8
store %"class.__gnu_cxx::__normal_iterator.10"* %this, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator.10"*, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %this1, i32 0, i32 0
ret %class.INode*** %_M_current
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS4_(%"class.__gnu_cxx::__normal_iterator.10"* %this, %class.INode*** dereferenceable(8) %__i) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator.10"*, align 8
%__i.addr = alloca %class.INode***, align 8
store %"class.__gnu_cxx::__normal_iterator.10"* %this, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
store %class.INode*** %__i, %class.INode**** %__i.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator.10"*, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %this1, i32 0, i32 0
%0 = load %class.INode***, %class.INode**** %__i.addr, align 8
%1 = load %class.INode**, %class.INode*** %0, align 8
store %class.INode** %1, %class.INode*** %_M_current, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEC2ES2_(%"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this) unnamed_addr #6 comdat align 2 {
entry:
%__comp = alloca %struct.NodeCmp, align 1
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %this.addr, align 8
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %this.addr, align 8
%_M_comp = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_iter", %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this1, i32 0, i32 0
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt11__make_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_RT0_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__comp) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, align 8
%__len = alloca i64, align 8
%__parent = alloca i64, align 8
%__value = alloca %class.INode*, align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp6 = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter", align 1
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__comp, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%call = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__last, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__first)
%cmp = icmp slt i64 %call, 2
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
br label %return
if.end: ; preds = %entry
%call2 = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__last, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__first)
store i64 %call2, i64* %__len, align 8
%0 = load i64, i64* %__len, align 8
%sub = sub nsw i64 %0, 2
%div = sdiv i64 %sub, 2
store i64 %div, i64* %__parent, align 8
br label %while.body
while.body: ; preds = %if.end, %if.end10
%1 = load i64, i64* %__parent, align 8
%call3 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %1)
%coerce.dive4 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp, i32 0, i32 0
store %class.INode** %call3, %class.INode*** %coerce.dive4, align 8
%call5 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp)
%2 = load %class.INode*, %class.INode** %call5, align 8
store %class.INode* %2, %class.INode** %__value, align 8
%3 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp to i8*
%4 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 8, i1 false)
%5 = load i64, i64* %__parent, align 8
%6 = load i64, i64* %__len, align 8
%7 = load %class.INode*, %class.INode** %__value, align 8
%8 = load %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%9 = bitcast %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %agg.tmp6 to i8*
%10 = bitcast %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %8 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %9, i8* align 1 %10, i64 1, i1 false)
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%11 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
call void @_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_T0_SE_T1_T2_(%class.INode** %11, i64 %5, i64 %6, %class.INode* %7)
%12 = load i64, i64* %__parent, align 8
%cmp8 = icmp eq i64 %12, 0
br i1 %cmp8, label %if.then9, label %if.end10
if.then9: ; preds = %while.body
br label %return
if.end10: ; preds = %while.body
%13 = load i64, i64* %__parent, align 8
%dec = add nsw i64 %13, -1
store i64 %dec, i64* %__parent, align 8
br label %while.body
return: ; preds = %if.then9, %if.then
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__lhs, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__rhs) #0 comdat {
entry:
%__lhs.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
%__rhs.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
store %"class.__gnu_cxx::__normal_iterator"* %__lhs, %"class.__gnu_cxx::__normal_iterator"** %__lhs.addr, align 8
store %"class.__gnu_cxx::__normal_iterator"* %__rhs, %"class.__gnu_cxx::__normal_iterator"** %__rhs.addr, align 8
%0 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %__lhs.addr, align 8
%call = call dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator"* %0)
%1 = load %class.INode**, %class.INode*** %call, align 8
%2 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %__rhs.addr, align 8
%call1 = call dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator"* %2)
%3 = load %class.INode**, %class.INode*** %call1, align 8
%sub.ptr.lhs.cast = ptrtoint %class.INode** %1 to i64
%sub.ptr.rhs.cast = ptrtoint %class.INode** %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: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %this, i64 %__n) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
%__n.addr = alloca i64, align 8
%ref.tmp = alloca %class.INode**, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_current, align 8
%1 = load i64, i64* %__n.addr, align 8
%add.ptr = getelementptr inbounds %class.INode*, %class.INode** %0, i64 %1
store %class.INode** %add.ptr, %class.INode*** %ref.tmp, align 8
call void @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator"* %retval, %class.INode*** dereferenceable(8) %ref.tmp)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %retval, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_current, align 8
ret %class.INode** %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_T0_SE_T1_T2_(%class.INode** %__first.coerce, i64 %__holeIndex, i64 %__len, %class.INode* %__value) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter", align 1
%__holeIndex.addr = alloca i64, align 8
%__len.addr = alloca i64, align 8
%__value.addr = alloca %class.INode*, align 8
%__topIndex = alloca i64, align 8
%__secondChild = alloca i64, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp2 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp12 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp23 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp28 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__cmp = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val", align 1
%agg.tmp34 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
store i64 %__holeIndex, i64* %__holeIndex.addr, align 8
store i64 %__len, i64* %__len.addr, align 8
store %class.INode* %__value, %class.INode** %__value.addr, align 8
%0 = load i64, i64* %__holeIndex.addr, align 8
store i64 %0, i64* %__topIndex, align 8
%1 = load i64, i64* %__holeIndex.addr, align 8
store i64 %1, i64* %__secondChild, align 8
br label %while.cond
while.cond: ; preds = %if.end, %entry
%2 = load i64, i64* %__secondChild, align 8
%3 = load i64, i64* %__len.addr, align 8
%sub = sub nsw i64 %3, 1
%div = sdiv i64 %sub, 2
%cmp = icmp slt i64 %2, %div
br i1 %cmp, label %while.body, label %while.end
while.body: ; preds = %while.cond
%4 = load i64, i64* %__secondChild, align 8
%add = add nsw i64 %4, 1
%mul = mul nsw i64 2, %add
store i64 %mul, i64* %__secondChild, align 8
%5 = load i64, i64* %__secondChild, align 8
%call = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %5)
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive1, align 8
%6 = load i64, i64* %__secondChild, align 8
%sub3 = sub nsw i64 %6, 1
%call4 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %sub3)
%coerce.dive5 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2, i32 0, i32 0
store %class.INode** %call4, %class.INode*** %coerce.dive5, align 8
%coerce.dive6 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%7 = load %class.INode**, %class.INode*** %coerce.dive6, align 8
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp2, i32 0, i32 0
%8 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
%call8 = call zeroext i1 @_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEESC_EEbT_T0_(%"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__comp, %class.INode** %7, %class.INode** %8)
br i1 %call8, label %if.then, label %if.end
if.then: ; preds = %while.body
%9 = load i64, i64* %__secondChild, align 8
%dec = add nsw i64 %9, -1
store i64 %dec, i64* %__secondChild, align 8
br label %if.end
if.end: ; preds = %if.then, %while.body
%10 = load i64, i64* %__secondChild, align 8
%call9 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %10)
%coerce.dive10 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp, i32 0, i32 0
store %class.INode** %call9, %class.INode*** %coerce.dive10, align 8
%call11 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp)
%11 = load %class.INode*, %class.INode** %call11, align 8
%12 = load i64, i64* %__holeIndex.addr, align 8
%call13 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %12)
%coerce.dive14 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp12, i32 0, i32 0
store %class.INode** %call13, %class.INode*** %coerce.dive14, align 8
%call15 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp12)
store %class.INode* %11, %class.INode** %call15, align 8
%13 = load i64, i64* %__secondChild, align 8
store i64 %13, i64* %__holeIndex.addr, align 8
br label %while.cond
while.end: ; preds = %while.cond
%14 = load i64, i64* %__len.addr, align 8
%and = and i64 %14, 1
%cmp16 = icmp eq i64 %and, 0
br i1 %cmp16, label %land.lhs.true, label %if.end33
land.lhs.true: ; preds = %while.end
%15 = load i64, i64* %__secondChild, align 8
%16 = load i64, i64* %__len.addr, align 8
%sub17 = sub nsw i64 %16, 2
%div18 = sdiv i64 %sub17, 2
%cmp19 = icmp eq i64 %15, %div18
br i1 %cmp19, label %if.then20, label %if.end33
if.then20: ; preds = %land.lhs.true
%17 = load i64, i64* %__secondChild, align 8
%add21 = add nsw i64 %17, 1
%mul22 = mul nsw i64 2, %add21
store i64 %mul22, i64* %__secondChild, align 8
%18 = load i64, i64* %__secondChild, align 8
%sub24 = sub nsw i64 %18, 1
%call25 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %sub24)
%coerce.dive26 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp23, i32 0, i32 0
store %class.INode** %call25, %class.INode*** %coerce.dive26, align 8
%call27 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp23)
%19 = load %class.INode*, %class.INode** %call27, align 8
%20 = load i64, i64* %__holeIndex.addr, align 8
%call29 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %20)
%coerce.dive30 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp28, i32 0, i32 0
store %class.INode** %call29, %class.INode*** %coerce.dive30, align 8
%call31 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp28)
store %class.INode* %19, %class.INode** %call31, align 8
%21 = load i64, i64* %__secondChild, align 8
%sub32 = sub nsw i64 %21, 1
store i64 %sub32, i64* %__holeIndex.addr, align 8
br label %if.end33
if.end33: ; preds = %if.then20, %land.lhs.true, %while.end
call void @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ERKNS0_15_Iter_comp_iterIS2_EE(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %__cmp, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__comp)
%22 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp34 to i8*
%23 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %22, i8* align 8 %23, i64 8, i1 false)
%24 = load i64, i64* %__holeIndex.addr, align 8
%25 = load i64, i64* %__topIndex, align 8
%26 = load %class.INode*, %class.INode** %__value.addr, align 8
%coerce.dive35 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp34, i32 0, i32 0
%27 = load %class.INode**, %class.INode*** %coerce.dive35, align 8
call void @_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valI7NodeCmpEEEvT_T0_SE_T1_RT2_(%class.INode** %27, i64 %24, i64 %25, %class.INode* %26, %"struct.__gnu_cxx::__ops::_Iter_comp_val"* dereferenceable(1) %__cmp)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
ret %class.INode*** %_M_current
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator"* %this, %class.INode*** dereferenceable(8) %__i) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
%__i.addr = alloca %class.INode***, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
store %class.INode*** %__i, %class.INode**** %__i.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
%0 = load %class.INode***, %class.INode**** %__i.addr, align 8
%1 = load %class.INode**, %class.INode*** %0, align 8
store %class.INode** %1, %class.INode*** %_M_current, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEESC_EEbT_T0_(%"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this, %class.INode** %__it1.coerce, %class.INode** %__it2.coerce) #0 comdat align 2 {
entry:
%__it1 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__it2 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__it1, i32 0, i32 0
store %class.INode** %__it1.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__it2, i32 0, i32 0
store %class.INode** %__it2.coerce, %class.INode*** %coerce.dive1, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %this.addr, align 8
%this2 = load %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %this.addr, align 8
%_M_comp = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_iter", %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %this2, i32 0, i32 0
%call = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__it1)
%0 = load %class.INode*, %class.INode** %call, align 8
%call3 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__it2)
%1 = load %class.INode*, %class.INode** %call3, align 8
%call4 = call zeroext i1 @_ZNK7NodeCmpclEPK5INodeS2_(%struct.NodeCmp* %_M_comp, %class.INode* %0, %class.INode* %1)
ret i1 %call4
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ERKNS0_15_Iter_comp_iterIS2_EE(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__comp) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, align 8
%__comp.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__comp, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
%_M_comp = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_val", %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this1, i32 0, i32 0
%0 = load %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%_M_comp2 = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_iter", %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %0, i32 0, i32 0
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valI7NodeCmpEEEvT_T0_SE_T1_RT2_(%class.INode** %__first.coerce, i64 %__holeIndex, i64 %__topIndex, %class.INode* %__value, %"struct.__gnu_cxx::__ops::_Iter_comp_val"* dereferenceable(1) %__comp) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__holeIndex.addr = alloca i64, align 8
%__topIndex.addr = alloca i64, align 8
%__value.addr = alloca %class.INode*, align 8
%__comp.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, align 8
%__parent = alloca i64, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp7 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%ref.tmp13 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
store i64 %__holeIndex, i64* %__holeIndex.addr, align 8
store i64 %__topIndex, i64* %__topIndex.addr, align 8
store %class.INode* %__value, %class.INode** %__value.addr, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %__comp, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %__comp.addr, align 8
%0 = load i64, i64* %__holeIndex.addr, align 8
%sub = sub nsw i64 %0, 1
%div = sdiv i64 %sub, 2
store i64 %div, i64* %__parent, align 8
br label %while.cond
while.cond: ; preds = %while.body, %entry
%1 = load i64, i64* %__holeIndex.addr, align 8
%2 = load i64, i64* %__topIndex.addr, align 8
%cmp = icmp sgt i64 %1, %2
br i1 %cmp, label %land.rhs, label %land.end
land.rhs: ; preds = %while.cond
%3 = load %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %__comp.addr, align 8
%4 = load i64, i64* %__parent, align 8
%call = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %4)
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive1, align 8
%coerce.dive2 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%5 = load %class.INode**, %class.INode*** %coerce.dive2, align 8
%call3 = call zeroext i1 @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEES7_EEbT_RT0_(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %3, %class.INode** %5, %class.INode** dereferenceable(8) %__value.addr)
br label %land.end
land.end: ; preds = %land.rhs, %while.cond
%6 = phi i1 [ false, %while.cond ], [ %call3, %land.rhs ]
br i1 %6, label %while.body, label %while.end
while.body: ; preds = %land.end
%7 = load i64, i64* %__parent, align 8
%call4 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %7)
%coerce.dive5 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp, i32 0, i32 0
store %class.INode** %call4, %class.INode*** %coerce.dive5, align 8
%call6 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp)
%8 = load %class.INode*, %class.INode** %call6, align 8
%9 = load i64, i64* %__holeIndex.addr, align 8
%call8 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %9)
%coerce.dive9 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp7, i32 0, i32 0
store %class.INode** %call8, %class.INode*** %coerce.dive9, align 8
%call10 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp7)
store %class.INode* %8, %class.INode** %call10, align 8
%10 = load i64, i64* %__parent, align 8
store i64 %10, i64* %__holeIndex.addr, align 8
%11 = load i64, i64* %__holeIndex.addr, align 8
%sub11 = sub nsw i64 %11, 1
%div12 = sdiv i64 %sub11, 2
store i64 %div12, i64* %__parent, align 8
br label %while.cond
while.end: ; preds = %land.end
%12 = load %class.INode*, %class.INode** %__value.addr, align 8
%13 = load i64, i64* %__holeIndex.addr, align 8
%call14 = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEplEl(%"class.__gnu_cxx::__normal_iterator"* %__first, i64 %13)
%coerce.dive15 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp13, i32 0, i32 0
store %class.INode** %call14, %class.INode*** %coerce.dive15, align 8
%call16 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp13)
store %class.INode* %12, %class.INode** %call16, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNK7NodeCmpclEPK5INodeS2_(%struct.NodeCmp* %this, %class.INode* %lhs, %class.INode* %rhs) #6 comdat align 2 {
entry:
%this.addr = alloca %struct.NodeCmp*, align 8
%lhs.addr = alloca %class.INode*, align 8
%rhs.addr = alloca %class.INode*, align 8
store %struct.NodeCmp* %this, %struct.NodeCmp** %this.addr, align 8
store %class.INode* %lhs, %class.INode** %lhs.addr, align 8
store %class.INode* %rhs, %class.INode** %rhs.addr, align 8
%this1 = load %struct.NodeCmp*, %struct.NodeCmp** %this.addr, align 8
%0 = load %class.INode*, %class.INode** %lhs.addr, align 8
%f = getelementptr inbounds %class.INode, %class.INode* %0, i32 0, i32 1
%1 = load i32, i32* %f, align 8
%2 = load %class.INode*, %class.INode** %rhs.addr, align 8
%f2 = getelementptr inbounds %class.INode, %class.INode* %2, i32 0, i32 1
%3 = load i32, i32* %f2, align 8
%cmp = icmp sgt i32 %1, %3
ret i1 %cmp
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEclINS_17__normal_iteratorIPP5INodeSt6vectorIS7_SaIS7_EEEES7_EEbT_RT0_(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this, %class.INode** %__it.coerce, %class.INode** dereferenceable(8) %__val) #6 comdat align 2 {
entry:
%__it = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, align 8
%__val.addr = alloca %class.INode**, align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__it, i32 0, i32 0
store %class.INode** %__it.coerce, %class.INode*** %coerce.dive, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
store %class.INode** %__val, %class.INode*** %__val.addr, align 8
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
%_M_comp = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_val", %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this1, i32 0, i32 0
%call = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__it)
%0 = load %class.INode*, %class.INode** %call, align 8
%1 = load %class.INode**, %class.INode*** %__val.addr, align 8
%2 = load %class.INode*, %class.INode** %1, align 8
%call2 = call zeroext i1 @_ZNK7NodeCmpclEPK5INodeS2_(%struct.NodeCmp* %_M_comp, %class.INode* %0, %class.INode* %2)
ret i1 %call2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EE9push_backERKS1_(%"class.std::vector"* %this, %class.INode** dereferenceable(8) %__x) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
%__x.addr = alloca %class.INode**, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
store %class.INode** %__x, %class.INode*** %__x.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 1
%1 = load %class.INode**, %class.INode*** %_M_finish, align 8
%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_end_of_storage = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2, i32 0, i32 2
%3 = load %class.INode**, %class.INode*** %_M_end_of_storage, align 8
%cmp = icmp ne %class.INode** %1, %3
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%4 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl3 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %4, i32 0, i32 0
%5 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl3 to %"class.std::allocator"*
%6 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl4 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %6, i32 0, i32 0
%_M_finish5 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl4, i32 0, i32 1
%7 = load %class.INode**, %class.INode*** %_M_finish5, align 8
%8 = load %class.INode**, %class.INode*** %__x.addr, align 8
call void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE9constructIS2_EEvRS3_PS2_RKT_(%"class.std::allocator"* dereferenceable(1) %5, %class.INode** %7, %class.INode** dereferenceable(8) %8)
%9 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl6 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %9, i32 0, i32 0
%_M_finish7 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl6, i32 0, i32 1
%10 = load %class.INode**, %class.INode*** %_M_finish7, align 8
%incdec.ptr = getelementptr inbounds %class.INode*, %class.INode** %10, i32 1
store %class.INode** %incdec.ptr, %class.INode*** %_M_finish7, align 8
br label %if.end
if.else: ; preds = %entry
%call = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE3endEv(%"class.std::vector"* %this1)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive, align 8
%11 = load %class.INode**, %class.INode*** %__x.addr, align 8
%coerce.dive8 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%12 = load %class.INode**, %class.INode*** %coerce.dive8, align 8
call void @_ZNSt6vectorIP5INodeSaIS1_EE17_M_realloc_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_(%"class.std::vector"* %this1, %class.INode** %12, %class.INode** dereferenceable(8) %11)
br label %if.end
if.end: ; preds = %if.else, %if.then
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt9push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %__first.coerce, %class.INode** %__last.coerce) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp = alloca %struct.NodeCmp, align 1
%__cmp = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val", align 1
%agg.tmp = alloca %struct.NodeCmp, align 1
%__value = alloca %class.INode*, align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
call void @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ES2_(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %__cmp)
%call = call %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmiEl(%"class.__gnu_cxx::__normal_iterator"* %__last, i64 1)
%coerce.dive2 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive2, align 8
%call3 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %ref.tmp)
%0 = load %class.INode*, %class.INode** %call3, align 8
store %class.INode* %0, %class.INode** %__value, align 8
%1 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp4 to i8*
%2 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %1, i8* align 8 %2, i64 8, i1 false)
%call5 = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__last, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__first)
%sub = sub nsw i64 %call5, 1
%3 = load %class.INode*, %class.INode** %__value, align 8
%coerce.dive6 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp4, i32 0, i32 0
%4 = load %class.INode**, %class.INode*** %coerce.dive6, align 8
call void @_ZSt11__push_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops14_Iter_comp_valI7NodeCmpEEEvT_T0_SE_T1_RT2_(%class.INode** %4, i64 %sub, i64 0, %class.INode* %3, %"struct.__gnu_cxx::__ops::_Iter_comp_val"* dereferenceable(1) %__cmp)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE9constructIS2_EEvRS3_PS2_RKT_(%"class.std::allocator"* dereferenceable(1) %__a, %class.INode** %__p, %class.INode** dereferenceable(8) %__arg) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
%__arg.addr = alloca %class.INode**, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
store %class.INode** %__arg, %class.INode*** %__arg.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator"* %0 to %"class.__gnu_cxx::new_allocator"*
%2 = load %class.INode**, %class.INode*** %__p.addr, align 8
%3 = load %class.INode**, %class.INode*** %__arg.addr, align 8
call void @_ZN9__gnu_cxx13new_allocatorIP5INodeE9constructEPS2_RKS2_(%"class.__gnu_cxx::new_allocator"* %1, %class.INode** %2, %class.INode** dereferenceable(8) %3)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EE17_M_realloc_insertEN9__gnu_cxx17__normal_iteratorIPS1_S3_EERKS1_(%"class.std::vector"* %this, %class.INode** %__position.coerce, %class.INode** dereferenceable(8) %__x) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%__position = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"class.std::vector"*, align 8
%__x.addr = alloca %class.INode**, align 8
%__len = alloca i64, align 8
%__elems_before = alloca i64, align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__new_start = alloca %class.INode**, align 8
%__new_finish = alloca %class.INode**, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__position, i32 0, i32 0
store %class.INode** %__position.coerce, %class.INode*** %coerce.dive, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
store %class.INode** %__x, %class.INode*** %__x.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%call = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE12_M_check_lenEmPKc(%"class.std::vector"* %this1, i64 1, i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.26, i64 0, i64 0))
store i64 %call, i64* %__len, align 8
%call2 = call %class.INode** @_ZNSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %this1)
%coerce.dive3 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %ref.tmp, i32 0, i32 0
store %class.INode** %call2, %class.INode*** %coerce.dive3, align 8
%call4 = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__position, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %ref.tmp)
store i64 %call4, i64* %__elems_before, align 8
%0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%1 = load i64, i64* %__len, align 8
%call5 = call %class.INode** @_ZNSt12_Vector_baseIP5INodeSaIS1_EE11_M_allocateEm(%"struct.std::_Vector_base"* %0, i64 %1)
store %class.INode** %call5, %class.INode*** %__new_start, align 8
%2 = load %class.INode**, %class.INode*** %__new_start, align 8
store %class.INode** %2, %class.INode*** %__new_finish, align 8
%3 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %3, i32 0, i32 0
%4 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl to %"class.std::allocator"*
%5 = load %class.INode**, %class.INode*** %__new_start, align 8
%6 = load i64, i64* %__elems_before, align 8
%add.ptr = getelementptr inbounds %class.INode*, %class.INode** %5, i64 %6
%7 = load %class.INode**, %class.INode*** %__x.addr, align 8
invoke void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE9constructIS2_EEvRS3_PS2_RKT_(%"class.std::allocator"* dereferenceable(1) %4, %class.INode** %add.ptr, %class.INode** dereferenceable(8) %7)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
store %class.INode** null, %class.INode*** %__new_finish, align 8
%8 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl6 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %8, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl6, i32 0, i32 0
%9 = load %class.INode**, %class.INode*** %_M_start, align 8
%call8 = invoke dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator"* %__position)
to label %invoke.cont7 unwind label %lpad
invoke.cont7: ; preds = %invoke.cont
%10 = load %class.INode**, %class.INode*** %call8, align 8
%11 = load %class.INode**, %class.INode*** %__new_start, align 8
%12 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call10 = invoke dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %12)
to label %invoke.cont9 unwind label %lpad
invoke.cont9: ; preds = %invoke.cont7
%call12 = invoke %class.INode** @_ZSt34__uninitialized_move_if_noexcept_aIPP5INodeS2_SaIS1_EET0_T_S5_S4_RT1_(%class.INode** %9, %class.INode** %10, %class.INode** %11, %"class.std::allocator"* dereferenceable(1) %call10)
to label %invoke.cont11 unwind label %lpad
invoke.cont11: ; preds = %invoke.cont9
store %class.INode** %call12, %class.INode*** %__new_finish, align 8
%13 = load %class.INode**, %class.INode*** %__new_finish, align 8
%incdec.ptr = getelementptr inbounds %class.INode*, %class.INode** %13, i32 1
store %class.INode** %incdec.ptr, %class.INode*** %__new_finish, align 8
%call14 = invoke dereferenceable(8) %class.INode*** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEE4baseEv(%"class.__gnu_cxx::__normal_iterator"* %__position)
to label %invoke.cont13 unwind label %lpad
invoke.cont13: ; preds = %invoke.cont11
%14 = load %class.INode**, %class.INode*** %call14, align 8
%15 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl15 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %15, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl15, i32 0, i32 1
%16 = load %class.INode**, %class.INode*** %_M_finish, align 8
%17 = load %class.INode**, %class.INode*** %__new_finish, align 8
%18 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call17 = invoke dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %18)
to label %invoke.cont16 unwind label %lpad
invoke.cont16: ; preds = %invoke.cont13
%call19 = invoke %class.INode** @_ZSt34__uninitialized_move_if_noexcept_aIPP5INodeS2_SaIS1_EET0_T_S5_S4_RT1_(%class.INode** %14, %class.INode** %16, %class.INode** %17, %"class.std::allocator"* dereferenceable(1) %call17)
to label %invoke.cont18 unwind label %lpad
invoke.cont18: ; preds = %invoke.cont16
store %class.INode** %call19, %class.INode*** %__new_finish, align 8
br label %try.cont
lpad: ; preds = %invoke.cont16, %invoke.cont13, %invoke.cont11, %invoke.cont9, %invoke.cont7, %invoke.cont, %entry
%19 = landingpad { i8*, i32 }
catch i8* null
%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 %catch
catch: ; preds = %lpad
%exn = load i8*, i8** %exn.slot, align 8
%22 = call i8* @__cxa_begin_catch(i8* %exn) #3
%23 = load %class.INode**, %class.INode*** %__new_finish, align 8
%tobool = icmp ne %class.INode** %23, null
br i1 %tobool, label %if.else, label %if.then
if.then: ; preds = %catch
%24 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl20 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %24, i32 0, i32 0
%25 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl20 to %"class.std::allocator"*
%26 = load %class.INode**, %class.INode*** %__new_start, align 8
%27 = load i64, i64* %__elems_before, align 8
%add.ptr21 = getelementptr inbounds %class.INode*, %class.INode** %26, i64 %27
invoke void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE7destroyERS3_PS2_(%"class.std::allocator"* dereferenceable(1) %25, %class.INode** %add.ptr21)
to label %invoke.cont23 unwind label %lpad22
invoke.cont23: ; preds = %if.then
br label %if.end
lpad22: ; preds = %invoke.cont27, %if.end, %invoke.cont24, %if.else, %if.then
%28 = landingpad { i8*, i32 }
cleanup
%29 = extractvalue { i8*, i32 } %28, 0
store i8* %29, i8** %exn.slot, align 8
%30 = extractvalue { i8*, i32 } %28, 1
store i32 %30, i32* %ehselector.slot, align 4
invoke void @__cxa_end_catch()
to label %invoke.cont28 unwind label %terminate.lpad
if.else: ; preds = %catch
%31 = load %class.INode**, %class.INode*** %__new_start, align 8
%32 = load %class.INode**, %class.INode*** %__new_finish, align 8
%33 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call25 = invoke dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %33)
to label %invoke.cont24 unwind label %lpad22
invoke.cont24: ; preds = %if.else
invoke void @_ZSt8_DestroyIPP5INodeS1_EvT_S3_RSaIT0_E(%class.INode** %31, %class.INode** %32, %"class.std::allocator"* dereferenceable(1) %call25)
to label %invoke.cont26 unwind label %lpad22
invoke.cont26: ; preds = %invoke.cont24
br label %if.end
if.end: ; preds = %invoke.cont26, %invoke.cont23
%34 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%35 = load %class.INode**, %class.INode*** %__new_start, align 8
%36 = load i64, i64* %__len, align 8
invoke void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE13_M_deallocateEPS1_m(%"struct.std::_Vector_base"* %34, %class.INode** %35, i64 %36)
to label %invoke.cont27 unwind label %lpad22
invoke.cont27: ; preds = %if.end
invoke void @__cxa_rethrow() #19
to label %unreachable unwind label %lpad22
invoke.cont28: ; preds = %lpad22
br label %eh.resume
try.cont: ; preds = %invoke.cont18
%37 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl29 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %37, i32 0, i32 0
%_M_start30 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl29, i32 0, i32 0
%38 = load %class.INode**, %class.INode*** %_M_start30, align 8
%39 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl31 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %39, i32 0, i32 0
%_M_finish32 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl31, i32 0, i32 1
%40 = load %class.INode**, %class.INode*** %_M_finish32, align 8
%41 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call33 = call dereferenceable(1) %"class.std::allocator"* @_ZNSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %41)
call void @_ZSt8_DestroyIPP5INodeS1_EvT_S3_RSaIT0_E(%class.INode** %38, %class.INode** %40, %"class.std::allocator"* dereferenceable(1) %call33)
%42 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%43 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl34 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %43, i32 0, i32 0
%_M_start35 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl34, i32 0, i32 0
%44 = load %class.INode**, %class.INode*** %_M_start35, align 8
%45 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl36 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %45, i32 0, i32 0
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl36, i32 0, i32 2
%46 = load %class.INode**, %class.INode*** %_M_end_of_storage, align 8
%47 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl37 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %47, i32 0, i32 0
%_M_start38 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl37, i32 0, i32 0
%48 = load %class.INode**, %class.INode*** %_M_start38, align 8
%sub.ptr.lhs.cast = ptrtoint %class.INode** %46 to i64
%sub.ptr.rhs.cast = ptrtoint %class.INode** %48 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
call void @_ZNSt12_Vector_baseIP5INodeSaIS1_EE13_M_deallocateEPS1_m(%"struct.std::_Vector_base"* %42, %class.INode** %44, i64 %sub.ptr.div)
%49 = load %class.INode**, %class.INode*** %__new_start, align 8
%50 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl39 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %50, i32 0, i32 0
%_M_start40 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl39, i32 0, i32 0
store %class.INode** %49, %class.INode*** %_M_start40, align 8
%51 = load %class.INode**, %class.INode*** %__new_finish, align 8
%52 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl41 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %52, i32 0, i32 0
%_M_finish42 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl41, i32 0, i32 1
store %class.INode** %51, %class.INode*** %_M_finish42, align 8
%53 = load %class.INode**, %class.INode*** %__new_start, align 8
%54 = load i64, i64* %__len, align 8
%add.ptr43 = getelementptr inbounds %class.INode*, %class.INode** %53, i64 %54
%55 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl44 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %55, i32 0, i32 0
%_M_end_of_storage45 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl44, i32 0, i32 2
store %class.INode** %add.ptr43, %class.INode*** %_M_end_of_storage45, align 8
ret void
eh.resume: ; preds = %invoke.cont28
%exn46 = load i8*, i8** %exn.slot, align 8
%sel = load i32, i32* %ehselector.slot, align 4
%lpad.val = insertvalue { i8*, i32 } undef, i8* %exn46, 0
%lpad.val47 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val47
terminate.lpad: ; preds = %lpad22
%56 = landingpad { i8*, i32 }
catch i8* null
%57 = extractvalue { i8*, i32 } %56, 0
call void @__clang_call_terminate(i8* %57) #16
unreachable
unreachable: ; preds = %invoke.cont27
unreachable
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeE9constructEPS2_RKS2_(%"class.__gnu_cxx::new_allocator"* %this, %class.INode** %__p, %class.INode** dereferenceable(8) %__val) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
%__val.addr = alloca %class.INode**, align 8
store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
store %class.INode** %__val, %class.INode*** %__val.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
%0 = load %class.INode**, %class.INode*** %__p.addr, align 8
%1 = bitcast %class.INode** %0 to i8*
%2 = bitcast i8* %1 to %class.INode**
%3 = load %class.INode**, %class.INode*** %__val.addr, align 8
%4 = load %class.INode*, %class.INode** %3, align 8
store %class.INode* %4, %class.INode** %2, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIP5INodeSaIS1_EE12_M_check_lenEmPKc(%"class.std::vector"* %this, i64 %__n, i8* %__s) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
%__n.addr = alloca i64, align 8
%__s.addr = alloca i8*, align 8
%__len = alloca i64, align 8
%ref.tmp = alloca i64, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store i8* %__s, i8** %__s.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%call = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE8max_sizeEv(%"class.std::vector"* %this1)
%call2 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %this1)
%sub = sub i64 %call, %call2
%0 = load i64, i64* %__n.addr, align 8
%cmp = icmp ult i64 %sub, %0
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%1 = load i8*, i8** %__s.addr, align 8
call void @_ZSt20__throw_length_errorPKc(i8* %1) #19
unreachable
if.end: ; preds = %entry
%call3 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %this1)
%call4 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %this1)
store i64 %call4, i64* %ref.tmp, align 8
%call5 = call dereferenceable(8) i64* @_ZSt3maxImERKT_S2_S2_(i64* dereferenceable(8) %ref.tmp, i64* dereferenceable(8) %__n.addr)
%2 = load i64, i64* %call5, align 8
%add = add i64 %call3, %2
store i64 %add, i64* %__len, align 8
%3 = load i64, i64* %__len, align 8
%call6 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE4sizeEv(%"class.std::vector"* %this1)
%cmp7 = icmp ult i64 %3, %call6
br i1 %cmp7, label %cond.true, label %lor.lhs.false
lor.lhs.false: ; preds = %if.end
%4 = load i64, i64* %__len, align 8
%call8 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE8max_sizeEv(%"class.std::vector"* %this1)
%cmp9 = icmp ugt i64 %4, %call8
br i1 %cmp9, label %cond.true, label %cond.false
cond.true: ; preds = %lor.lhs.false, %if.end
%call10 = call i64 @_ZNKSt6vectorIP5INodeSaIS1_EE8max_sizeEv(%"class.std::vector"* %this1)
br label %cond.end
cond.false: ; preds = %lor.lhs.false
%5 = load i64, i64* %__len, align 8
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i64 [ %call10, %cond.true ], [ %5, %cond.false ]
ret i64 %cond
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt34__uninitialized_move_if_noexcept_aIPP5INodeS2_SaIS1_EET0_T_S5_S4_RT1_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result, %"class.std::allocator"* dereferenceable(1) %__alloc) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%__alloc.addr = alloca %"class.std::allocator"*, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store %"class.std::allocator"* %__alloc, %"class.std::allocator"** %__alloc.addr, align 8
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%3 = load %"class.std::allocator"*, %"class.std::allocator"** %__alloc.addr, align 8
%call = call %class.INode** @_ZSt22__uninitialized_copy_aIPP5INodeS2_S1_ET0_T_S4_S3_RSaIT1_E(%class.INode** %0, %class.INode** %1, %class.INode** %2, %"class.std::allocator"* dereferenceable(1) %3)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE7destroyERS3_PS2_(%"class.std::allocator"* dereferenceable(1) %__a, %class.INode** %__p) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator"* %0 to %"class.__gnu_cxx::new_allocator"*
%2 = load %class.INode**, %class.INode*** %__p.addr, align 8
call void @_ZN9__gnu_cxx13new_allocatorIP5INodeE7destroyEPS2_(%"class.__gnu_cxx::new_allocator"* %1, %class.INode** %2)
ret void
}
declare dso_local void @__cxa_rethrow()
declare dso_local void @__cxa_end_catch()
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIP5INodeSaIS1_EE8max_sizeEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%call = call dereferenceable(1) %"class.std::allocator"* @_ZNKSt12_Vector_baseIP5INodeSaIS1_EE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %0)
%call2 = call i64 @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8max_sizeERKS3_(%"class.std::allocator"* dereferenceable(1) %call)
ret i64 %call2
}
; Function Attrs: noreturn
declare dso_local void @_ZSt20__throw_length_errorPKc(i8*) #15
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) i64* @_ZSt3maxImERKT_S2_S2_(i64* dereferenceable(8) %__a, i64* dereferenceable(8) %__b) #6 comdat {
entry:
%retval = alloca i64*, align 8
%__a.addr = alloca i64*, align 8
%__b.addr = alloca i64*, align 8
store i64* %__a, i64** %__a.addr, align 8
store i64* %__b, i64** %__b.addr, align 8
%0 = load i64*, i64** %__a.addr, align 8
%1 = load i64, i64* %0, align 8
%2 = load i64*, i64** %__b.addr, align 8
%3 = load i64, i64* %2, align 8
%cmp = icmp ult i64 %1, %3
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%4 = load i64*, i64** %__b.addr, align 8
store i64* %4, i64** %retval, align 8
br label %return
if.end: ; preds = %entry
%5 = load i64*, i64** %__a.addr, align 8
store i64* %5, i64** %retval, align 8
br label %return
return: ; preds = %if.end, %if.then
%6 = load i64*, i64** %retval, align 8
ret i64* %6
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE8max_sizeERKS3_(%"class.std::allocator"* dereferenceable(1) %__a) #6 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator"*, align 8
store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8
%0 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator"* %0 to %"class.__gnu_cxx::new_allocator"*
%call = call i64 @_ZNK9__gnu_cxx13new_allocatorIP5INodeE8max_sizeEv(%"class.__gnu_cxx::new_allocator"* %1) #3
ret i64 %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt22__uninitialized_copy_aIPP5INodeS2_S1_ET0_T_S4_S3_RSaIT1_E(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result, %"class.std::allocator"* dereferenceable(1) %0) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%.addr = alloca %"class.std::allocator"*, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store %"class.std::allocator"* %0, %"class.std::allocator"** %.addr, align 8
%1 = load %class.INode**, %class.INode*** %__first.addr, align 8
%2 = load %class.INode**, %class.INode*** %__last.addr, align 8
%3 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call = call %class.INode** @_ZSt18uninitialized_copyIPP5INodeS2_ET0_T_S4_S3_(%class.INode** %1, %class.INode** %2, %class.INode** %3)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt18uninitialized_copyIPP5INodeS2_ET0_T_S4_S3_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%__assignable = alloca i8, align 1
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store i8 1, i8* %__assignable, align 1
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call = call %class.INode** @_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPP5INodeS4_EET0_T_S6_S5_(%class.INode** %0, %class.INode** %1, %class.INode** %2)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNSt20__uninitialized_copyILb1EE13__uninit_copyIPP5INodeS4_EET0_T_S6_S5_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #0 comdat align 2 {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call = call %class.INode** @_ZSt4copyIPP5INodeS2_ET0_T_S4_S3_(%class.INode** %0, %class.INode** %1, %class.INode** %2)
ret %class.INode** %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt4copyIPP5INodeS2_ET0_T_S4_S3_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%call = call %class.INode** @_ZSt12__miter_baseIPP5INodeET_S3_(%class.INode** %0)
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%call1 = call %class.INode** @_ZSt12__miter_baseIPP5INodeET_S3_(%class.INode** %1)
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call2 = call %class.INode** @_ZSt14__copy_move_a2ILb0EPP5INodeS2_ET1_T0_S4_S3_(%class.INode** %call, %class.INode** %call1, %class.INode** %2)
ret %class.INode** %call2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt14__copy_move_a2ILb0EPP5INodeS2_ET1_T0_S4_S3_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #0 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%call = call %class.INode** @_ZSt12__niter_baseIPP5INodeET_S3_(%class.INode** %0)
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%call1 = call %class.INode** @_ZSt12__niter_baseIPP5INodeET_S3_(%class.INode** %1)
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call2 = call %class.INode** @_ZSt12__niter_baseIPP5INodeET_S3_(%class.INode** %2)
%call3 = call %class.INode** @_ZSt13__copy_move_aILb0EPP5INodeS2_ET1_T0_S4_S3_(%class.INode** %call, %class.INode** %call1, %class.INode** %call2)
ret %class.INode** %call3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt12__miter_baseIPP5INodeET_S3_(%class.INode** %__it) #6 comdat {
entry:
%__it.addr = alloca %class.INode**, align 8
store %class.INode** %__it, %class.INode*** %__it.addr, align 8
%0 = load %class.INode**, %class.INode*** %__it.addr, align 8
ret %class.INode** %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZSt13__copy_move_aILb0EPP5INodeS2_ET1_T0_S4_S3_(%class.INode** %__first, %class.INode** %__last, %class.INode** %__result) #6 comdat {
entry:
%__first.addr = alloca %class.INode**, align 8
%__last.addr = alloca %class.INode**, align 8
%__result.addr = alloca %class.INode**, align 8
%__simple = alloca i8, align 1
store %class.INode** %__first, %class.INode*** %__first.addr, align 8
store %class.INode** %__last, %class.INode*** %__last.addr, align 8
store %class.INode** %__result, %class.INode*** %__result.addr, align 8
store i8 1, i8* %__simple, align 1
%0 = load %class.INode**, %class.INode*** %__first.addr, align 8
%1 = load %class.INode**, %class.INode*** %__last.addr, align 8
%2 = load %class.INode**, %class.INode*** %__result.addr, align 8
%call = call %class.INode** @_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mIP5INodeEEPT_PKS5_S8_S6_(%class.INode** %0, %class.INode** %1, %class.INode** %2)
ret %class.INode** %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIP5INodeE7destroyEPS2_(%"class.__gnu_cxx::new_allocator"* %this, %class.INode** %__p) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
%__p.addr = alloca %class.INode**, align 8
store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
store %class.INode** %__p, %class.INode*** %__p.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx5__ops14_Iter_comp_valI7NodeCmpEC2ES2_(%"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this) unnamed_addr #6 comdat align 2 {
entry:
%__comp = alloca %struct.NodeCmp, align 1
%this.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
%this1 = load %"struct.__gnu_cxx::__ops::_Iter_comp_val"*, %"struct.__gnu_cxx::__ops::_Iter_comp_val"** %this.addr, align 8
%_M_comp = getelementptr inbounds %"struct.__gnu_cxx::__ops::_Iter_comp_val", %"struct.__gnu_cxx::__ops::_Iter_comp_val"* %this1, i32 0, i32 0
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmiEl(%"class.__gnu_cxx::__normal_iterator"* %this, i64 %__n) #0 comdat align 2 {
entry:
%retval = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
%__n.addr = alloca i64, align 8
%ref.tmp = alloca %class.INode**, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_current, align 8
%1 = load i64, i64* %__n.addr, align 8
%idx.neg = sub i64 0, %1
%add.ptr = getelementptr inbounds %class.INode*, %class.INode** %0, i64 %idx.neg
store %class.INode** %add.ptr, %class.INode*** %ref.tmp, align 8
call void @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEC2ERKS3_(%"class.__gnu_cxx::__normal_iterator"* %retval, %class.INode*** dereferenceable(8) %ref.tmp)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %retval, i32 0, i32 0
%2 = load %class.INode**, %class.INode*** %coerce.dive, align 8
ret %class.INode** %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE5frontEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
%ref.tmp = alloca %"class.__gnu_cxx::__normal_iterator.10", align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
%call = call %class.INode** @_ZNKSt6vectorIP5INodeSaIS1_EE5beginEv(%"class.std::vector"* %this1)
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %ref.tmp, i32 0, i32 0
store %class.INode** %call, %class.INode*** %coerce.dive, align 8
%call2 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator.10"* %ref.tmp)
ret %class.INode** %call2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPKP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator.10"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator.10"*, align 8
store %"class.__gnu_cxx::__normal_iterator.10"* %this, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator.10"*, %"class.__gnu_cxx::__normal_iterator.10"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.10", %"class.__gnu_cxx::__normal_iterator.10"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_current, align 8
ret %class.INode** %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt8pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEE7NodeCmpEvT_SA_T0_(%class.INode** %__first.coerce, %class.INode** %__last.coerce) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp = alloca %struct.NodeCmp, align 1
%__cmp = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter", align 1
%agg.tmp = alloca %struct.NodeCmp, align 1
%agg.tmp3 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp4 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp5 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
%call = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__last, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__first)
%cmp = icmp sgt i64 %call, 1
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
call void @_ZN9__gnu_cxx5__ops15_Iter_comp_iterI7NodeCmpEC2ES2_(%"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__cmp)
%call2 = call dereferenceable(8) %"class.__gnu_cxx::__normal_iterator"* @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmmEv(%"class.__gnu_cxx::__normal_iterator"* %__last)
%0 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3 to i8*
%1 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp4 to i8*
%3 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false)
%4 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp5 to i8*
%5 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %4, i8* align 8 %5, i64 8, i1 false)
%coerce.dive6 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp3, i32 0, i32 0
%6 = load %class.INode**, %class.INode*** %coerce.dive6, align 8
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp4, i32 0, i32 0
%7 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
%coerce.dive8 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp5, i32 0, i32 0
%8 = load %class.INode**, %class.INode*** %coerce.dive8, align 8
call void @_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_SD_RT0_(%class.INode** %6, %class.INode** %7, %class.INode** %8, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__cmp)
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIP5INodeSaIS1_EE8pop_backEv(%"class.std::vector"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector"*, align 8
store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8
%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<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl, i32 0, i32 1
%1 = load %class.INode**, %class.INode*** %_M_finish, align 8
%incdec.ptr = getelementptr inbounds %class.INode*, %class.INode** %1, i32 -1
store %class.INode** %incdec.ptr, %class.INode*** %_M_finish, align 8
%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
%3 = bitcast %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl2 to %"class.std::allocator"*
%4 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
%_M_impl3 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %4, i32 0, i32 0
%_M_finish4 = getelementptr inbounds %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl", %"struct.std::_Vector_base<INode *, std::allocator<INode *> >::_Vector_impl"* %_M_impl3, i32 0, i32 1
%5 = load %class.INode**, %class.INode*** %_M_finish4, align 8
call void @_ZN9__gnu_cxx14__alloc_traitsISaIP5INodeEE7destroyERS3_PS2_(%"class.std::allocator"* dereferenceable(1) %3, %class.INode** %5)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"class.__gnu_cxx::__normal_iterator"* @_ZN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEmmEv(%"class.__gnu_cxx::__normal_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::__normal_iterator"*, align 8
store %"class.__gnu_cxx::__normal_iterator"* %this, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::__normal_iterator"*, %"class.__gnu_cxx::__normal_iterator"** %this.addr, align 8
%_M_current = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %this1, i32 0, i32 0
%0 = load %class.INode**, %class.INode*** %_M_current, align 8
%incdec.ptr = getelementptr inbounds %class.INode*, %class.INode** %0, i32 -1
store %class.INode** %incdec.ptr, %class.INode*** %_M_current, align 8
ret %"class.__gnu_cxx::__normal_iterator"* %this1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZSt10__pop_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEENS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_SD_SD_RT0_(%class.INode** %__first.coerce, %class.INode** %__last.coerce, %class.INode** %__result.coerce, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* dereferenceable(1) %__comp) #0 comdat {
entry:
%__first = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__last = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__result = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%__comp.addr = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, align 8
%__value = alloca %class.INode*, align 8
%agg.tmp = alloca %"class.__gnu_cxx::__normal_iterator", align 8
%agg.tmp6 = alloca %"struct.__gnu_cxx::__ops::_Iter_comp_iter", align 1
%coerce.dive = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__first, i32 0, i32 0
store %class.INode** %__first.coerce, %class.INode*** %coerce.dive, align 8
%coerce.dive1 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__last, i32 0, i32 0
store %class.INode** %__last.coerce, %class.INode*** %coerce.dive1, align 8
%coerce.dive2 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %__result, i32 0, i32 0
store %class.INode** %__result.coerce, %class.INode*** %coerce.dive2, align 8
store %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %__comp, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%call = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__result)
%0 = load %class.INode*, %class.INode** %call, align 8
store %class.INode* %0, %class.INode** %__value, align 8
%call3 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__first)
%1 = load %class.INode*, %class.INode** %call3, align 8
%call4 = call dereferenceable(8) %class.INode** @_ZNK9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS2_SaIS2_EEEdeEv(%"class.__gnu_cxx::__normal_iterator"* %__result)
store %class.INode* %1, %class.INode** %call4, align 8
%2 = bitcast %"class.__gnu_cxx::__normal_iterator"* %agg.tmp to i8*
%3 = bitcast %"class.__gnu_cxx::__normal_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %2, i8* align 8 %3, i64 8, i1 false)
%call5 = call i64 @_ZN9__gnu_cxxmiIPP5INodeSt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(%"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__last, %"class.__gnu_cxx::__normal_iterator"* dereferenceable(8) %__first)
%4 = load %class.INode*, %class.INode** %__value, align 8
%5 = load %"struct.__gnu_cxx::__ops::_Iter_comp_iter"*, %"struct.__gnu_cxx::__ops::_Iter_comp_iter"** %__comp.addr, align 8
%6 = bitcast %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %agg.tmp6 to i8*
%7 = bitcast %"struct.__gnu_cxx::__ops::_Iter_comp_iter"* %5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %6, i8* align 1 %7, i64 1, i1 false)
%coerce.dive7 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", %"class.__gnu_cxx::__normal_iterator"* %agg.tmp, i32 0, i32 0
%8 = load %class.INode**, %class.INode*** %coerce.dive7, align 8
call void @_ZSt13__adjust_heapIN9__gnu_cxx17__normal_iteratorIPP5INodeSt6vectorIS3_SaIS3_EEEElS3_NS0_5__ops15_Iter_comp_iterI7NodeCmpEEEvT_T0_SE_T1_T2_(%class.INode** %8, i64 0, i64 %call5, %class.INode* %4)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE11lower_boundERS6_(%"class.std::map"* %this, i8* dereferenceable(1) %__x) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::map"*, align 8
%__x.addr = alloca i8*, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
store i8* %__x, i8** %__x.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
%0 = load i8*, i8** %__x.addr, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11lower_boundERS1_(%"class.std::_Rb_tree"* %_M_t, i8* dereferenceable(1) %0)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
ret %"struct.std::_Rb_tree_node_base"* %1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEeqERKS6_(%"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %__x) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
store %"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
store %"struct.std::_Rb_tree_iterator"* %__x, %"struct.std::_Rb_tree_iterator"** %__x.addr, align 8
%this1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %__x.addr, align 8
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %1, i32 0, i32 0
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
%cmp = icmp eq %"struct.std::_Rb_tree_node_base"* %0, %2
ret i1 %cmp
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNKSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE8key_compEv(%"class.std::map"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::map"*, align 8
%undef.agg.tmp = alloca %"struct.std::less", align 1
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
call void @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8key_compEv(%"class.std::_Rb_tree"* %_M_t)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %this, i8* dereferenceable(1) %__x, i8* dereferenceable(1) %__y) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::less"*, align 8
%__x.addr = alloca i8*, align 8
%__y.addr = alloca i8*, align 8
store %"struct.std::less"* %this, %"struct.std::less"** %this.addr, align 8
store i8* %__x, i8** %__x.addr, align 8
store i8* %__y, i8** %__y.addr, align 8
%this1 = load %"struct.std::less"*, %"struct.std::less"** %this.addr, align 8
%0 = load i8*, i8** %__x.addr, align 8
%1 = load i8, i8* %0, align 1
%conv = zext i8 %1 to i32
%2 = load i8*, i8** %__y.addr, align 8
%3 = load i8, i8* %2, align 1
%conv2 = zext i8 %3 to i32
%cmp = icmp slt i32 %conv, %conv2
ret i1 %cmp
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(48) %"struct.std::pair"* @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEdeEv(%"struct.std::_Rb_tree_iterator"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
store %"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%1 = bitcast %"struct.std::_Rb_tree_node_base"* %0 to %"struct.std::_Rb_tree_node"*
%call = call %"struct.std::pair"* @_ZNSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %1)
ret %"struct.std::pair"* %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt3mapIhSt6vectorIbSaIbEESt4lessIhESaISt4pairIKhS2_EEE6insertESt17_Rb_tree_iteratorIS7_ERKS7_(%"class.std::map"* %this, %"struct.std::_Rb_tree_node_base"* %__position.coerce, %"struct.std::pair"* dereferenceable(48) %__x) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%__position = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::map"*, align 8
%__x.addr = alloca %"struct.std::pair"*, align 8
%agg.tmp = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__position, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %__position.coerce, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
store %"class.std::map"* %this, %"class.std::map"** %this.addr, align 8
store %"struct.std::pair"* %__x, %"struct.std::pair"** %__x.addr, align 8
%this1 = load %"class.std::map"*, %"class.std::map"** %this.addr, align 8
%_M_t = getelementptr inbounds %"class.std::map", %"class.std::map"* %this1, i32 0, i32 0
call void @_ZNSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2ERKSt17_Rb_tree_iteratorIS5_E(%"struct.std::_Rb_tree_const_iterator"* %agg.tmp, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %__position)
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__x.addr, align 8
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %agg.tmp, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS5_ERKS5_(%"class.std::_Rb_tree"* %_M_t, %"struct.std::_Rb_tree_node_base"* %1, %"struct.std::pair"* dereferenceable(48) %0)
%coerce.dive3 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive3, align 8
%coerce.dive4 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive4, align 8
ret %"struct.std::_Rb_tree_node_base"* %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERS0_RKS3_(%"struct.std::pair"* %this, i8* dereferenceable(1) %__a, %"class.std::vector.0"* dereferenceable(40) %__b) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::pair"*, align 8
%__a.addr = alloca i8*, align 8
%__b.addr = alloca %"class.std::vector.0"*, align 8
store %"struct.std::pair"* %this, %"struct.std::pair"** %this.addr, align 8
store i8* %__a, i8** %__a.addr, align 8
store %"class.std::vector.0"* %__b, %"class.std::vector.0"** %__b.addr, align 8
%this1 = load %"struct.std::pair"*, %"struct.std::pair"** %this.addr, align 8
%0 = bitcast %"struct.std::pair"* %this1 to %"class.std::__pair_base"*
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 0
%1 = load i8*, i8** %__a.addr, align 8
%2 = load i8, i8* %1, align 1
store i8 %2, i8* %first, align 8
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 1
%3 = load %"class.std::vector.0"*, %"class.std::vector.0"** %__b.addr, align 8
call void @_ZNSt6vectorIbSaIbEEC2ERKS1_(%"class.std::vector.0"* %second, %"class.std::vector.0"* dereferenceable(40) %3)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11lower_boundERS1_(%"class.std::_Rb_tree"* %this, i8* dereferenceable(1) %__k) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__k.addr = alloca i8*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store i8* %__k, i8** %__k.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_beginEv(%"class.std::_Rb_tree"* %this1)
%call2 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv(%"class.std::_Rb_tree"* %this1)
%0 = load i8*, i8** %__k.addr, align 8
%call3 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS5_EPSt18_Rb_tree_node_baseRS1_(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %call, %"struct.std::_Rb_tree_node_base"* %call2, i8* dereferenceable(1) %0)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call3, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%coerce.dive4 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive4, align 8
ret %"struct.std::_Rb_tree_node_base"* %1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_lower_boundEPSt13_Rb_tree_nodeIS5_EPSt18_Rb_tree_node_baseRS1_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__x, %"struct.std::_Rb_tree_node_base"* %__y, i8* dereferenceable(1) %__k) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%__y.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__k.addr = alloca i8*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__x, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
store %"struct.std::_Rb_tree_node_base"* %__y, %"struct.std::_Rb_tree_node_base"** %__y.addr, align 8
store i8* %__k, i8** %__k.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
br label %while.cond
while.cond: ; preds = %if.end, %entry
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%cmp = icmp ne %"struct.std::_Rb_tree_node"* %0, null
br i1 %cmp, label %while.body, label %while.end
while.body: ; preds = %while.cond
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%1 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %1, i32 0, i32 0
%2 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%call = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E(%"struct.std::_Rb_tree_node"* %2)
%3 = load i8*, i8** %__k.addr, align 8
%call2 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare, i8* dereferenceable(1) %call, i8* dereferenceable(1) %3)
br i1 %call2, label %if.else, label %if.then
if.then: ; preds = %while.body
%4 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%5 = bitcast %"struct.std::_Rb_tree_node"* %4 to %"struct.std::_Rb_tree_node_base"*
store %"struct.std::_Rb_tree_node_base"* %5, %"struct.std::_Rb_tree_node_base"** %__y.addr, align 8
%6 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%7 = bitcast %"struct.std::_Rb_tree_node"* %6 to %"struct.std::_Rb_tree_node_base"*
%call3 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %7)
store %"struct.std::_Rb_tree_node"* %call3, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
br label %if.end
if.else: ; preds = %while.body
%8 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%9 = bitcast %"struct.std::_Rb_tree_node"* %8 to %"struct.std::_Rb_tree_node_base"*
%call4 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %9)
store %"struct.std::_Rb_tree_node"* %call4, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
br label %if.end
if.end: ; preds = %if.else, %if.then
br label %while.cond
while.end: ; preds = %while.cond
%10 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__y.addr, align 8
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %10)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%11 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
ret %"struct.std::_Rb_tree_node_base"* %11
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
ret %"struct.std::_Rb_tree_node_base"* %_M_header
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E(%"struct.std::_Rb_tree_node"* %__x) #0 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%ref.tmp = alloca %"struct.std::_Select1st", align 1
store %"struct.std::_Rb_tree_node"* %__x, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%call = call dereferenceable(48) %"struct.std::pair"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt13_Rb_tree_nodeIS5_E(%"struct.std::_Rb_tree_node"* %0)
%call1 = call dereferenceable(1) i8* @_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_(%"struct.std::_Select1st"* %ref.tmp, %"struct.std::pair"* dereferenceable(48) %call)
ret i8* %call1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) i8* @_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_(%"struct.std::_Select1st"* %this, %"struct.std::pair"* dereferenceable(48) %__x) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Select1st"*, align 8
%__x.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::_Select1st"* %this, %"struct.std::_Select1st"** %this.addr, align 8
store %"struct.std::pair"* %__x, %"struct.std::pair"** %__x.addr, align 8
%this1 = load %"struct.std::_Select1st"*, %"struct.std::_Select1st"** %this.addr, align 8
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__x.addr, align 8
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %0, i32 0, i32 0
ret i8* %first
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(48) %"struct.std::pair"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt13_Rb_tree_nodeIS5_E(%"struct.std::_Rb_tree_node"* %__x) #0 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"struct.std::_Rb_tree_node"* %__x, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x.addr, align 8
%call = call %"struct.std::pair"* @_ZNKSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %0)
ret %"struct.std::pair"* %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8key_compEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %0, i32 0, i32 0
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_ESt23_Rb_tree_const_iteratorIS5_ERKS5_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node_base"* %__pos.coerce, %"struct.std::pair"* dereferenceable(48) %__x) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%__pos = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__x.addr = alloca %"struct.std::pair"*, align 8
%__an = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node", align 8
%agg.tmp = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %__pos, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %__pos.coerce, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::pair"* %__x, %"struct.std::pair"** %__x.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeC2ERSB_(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %__an, %"class.std::_Rb_tree"* dereferenceable(48) %this1)
%0 = bitcast %"struct.std::_Rb_tree_const_iterator"* %agg.tmp to i8*
%1 = bitcast %"struct.std::_Rb_tree_const_iterator"* %__pos to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = load %"struct.std::pair"*, %"struct.std::pair"** %__x.addr, align 8
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %agg.tmp, i32 0, i32 0
%3 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_ESt23_Rb_tree_const_iteratorIS5_ERKS5_RT_(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node_base"* %3, %"struct.std::pair"* dereferenceable(48) %2, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* dereferenceable(8) %__an)
%coerce.dive3 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive3, align 8
%coerce.dive4 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%4 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive4, align 8
ret %"struct.std::_Rb_tree_node_base"* %4
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeC2ERSB_(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this, %"class.std::_Rb_tree"* dereferenceable(48) %__t) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, align 8
%__t.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %this.addr, align 8
store %"class.std::_Rb_tree"* %__t, %"class.std::_Rb_tree"** %__t.addr, align 8
%this1 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %this.addr, align 8
%_M_t = getelementptr inbounds %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node", %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this1, i32 0, i32 0
%0 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %__t.addr, align 8
store %"class.std::_Rb_tree"* %0, %"class.std::_Rb_tree"** %_M_t, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_insert_unique_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_ESt23_Rb_tree_const_iteratorIS5_ERKS5_RT_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node_base"* %__position.coerce, %"struct.std::pair"* dereferenceable(48) %__v, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* dereferenceable(8) %__node_gen) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%__position = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__v.addr = alloca %"struct.std::pair"*, align 8
%__node_gen.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, align 8
%__res = alloca %"struct.std::pair.11", align 8
%agg.tmp = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%ref.tmp = alloca %"struct.std::_Select1st", align 1
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %__position, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %__position.coerce, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::pair"* %__v, %"struct.std::pair"** %__v.addr, align 8
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %__node_gen, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %__node_gen.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%0 = bitcast %"struct.std::_Rb_tree_const_iterator"* %agg.tmp to i8*
%1 = bitcast %"struct.std::_Rb_tree_const_iterator"* %__position to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false)
%2 = load %"struct.std::pair"*, %"struct.std::pair"** %__v.addr, align 8
%call = call dereferenceable(1) i8* @_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_(%"struct.std::_Select1st"* %ref.tmp, %"struct.std::pair"* dereferenceable(48) %2)
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %agg.tmp, i32 0, i32 0
%3 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
%call3 = call { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node_base"* %3, i8* dereferenceable(1) %call)
%4 = bitcast %"struct.std::pair.11"* %__res to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%5 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %4, i32 0, i32 0
%6 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call3, 0
store %"struct.std::_Rb_tree_node_base"* %6, %"struct.std::_Rb_tree_node_base"** %5, align 8
%7 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %4, i32 0, i32 1
%8 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call3, 1
store %"struct.std::_Rb_tree_node_base"* %8, %"struct.std::_Rb_tree_node_base"** %7, align 8
%second = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %__res, i32 0, i32 1
%9 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %second, align 8
%tobool = icmp ne %"struct.std::_Rb_tree_node_base"* %9, null
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
%first = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %__res, i32 0, i32 0
%10 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %first, align 8
%second4 = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %__res, i32 0, i32 1
%11 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %second4, align 8
%12 = load %"struct.std::pair"*, %"struct.std::pair"** %__v.addr, align 8
%13 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %__node_gen.addr, align 8
%call5 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE10_M_insert_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_EPSt18_Rb_tree_node_baseSH_RKS5_RT_(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node_base"* %10, %"struct.std::_Rb_tree_node_base"* %11, %"struct.std::pair"* dereferenceable(48) %12, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* dereferenceable(8) %13)
%coerce.dive6 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call5, %"struct.std::_Rb_tree_node_base"** %coerce.dive6, align 8
br label %return
if.end: ; preds = %entry
%first7 = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %__res, i32 0, i32 0
%14 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %first7, align 8
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %14)
br label %return
return: ; preds = %if.end, %if.then
%coerce.dive8 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%15 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive8, align 8
ret %"struct.std::_Rb_tree_node_base"* %15
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE29_M_get_insert_hint_unique_posESt23_Rb_tree_const_iteratorIS5_ERS1_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node_base"* %__position.coerce, i8* dereferenceable(1) %__k) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::pair.11", align 8
%__position = alloca %"struct.std::_Rb_tree_const_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__k.addr = alloca i8*, align 8
%__pos = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__before = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp37 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__after = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp55 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%ref.tmp69 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%ref.tmp78 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %__position, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %__position.coerce, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store i8* %__k, i8** %__k.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEE13_M_const_castEv(%"struct.std::_Rb_tree_const_iterator"* %__position)
%coerce.dive2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %coerce.dive2, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%call3 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv(%"class.std::_Rb_tree"* %this1)
%cmp = icmp eq %"struct.std::_Rb_tree_node_base"* %0, %call3
br i1 %cmp, label %if.then, label %if.else12
if.then: ; preds = %entry
%call4 = call i64 @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE4sizeEv(%"class.std::_Rb_tree"* %this1)
%cmp5 = icmp ugt i64 %call4, 0
br i1 %cmp5, label %land.lhs.true, label %if.else
land.lhs.true: ; preds = %if.then
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%1 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %1, i32 0, i32 0
%call6 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv(%"class.std::_Rb_tree"* %this1)
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %call6, align 8
%call7 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %2)
%3 = load i8*, i8** %__k.addr, align 8
%call8 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare, i8* dereferenceable(1) %call7, i8* dereferenceable(1) %3)
br i1 %call8, label %if.then9, label %if.else
if.then9: ; preds = %land.lhs.true
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp, align 8
%call10 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv(%"class.std::_Rb_tree"* %this1)
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %call10)
br label %return
if.else: ; preds = %land.lhs.true, %if.then
%4 = load i8*, i8** %__k.addr, align 8
%call11 = call { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE24_M_get_insert_unique_posERS1_(%"class.std::_Rb_tree"* %this1, i8* dereferenceable(1) %4)
%5 = bitcast %"struct.std::pair.11"* %retval to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%6 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %5, i32 0, i32 0
%7 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call11, 0
store %"struct.std::_Rb_tree_node_base"* %7, %"struct.std::_Rb_tree_node_base"** %6, align 8
%8 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %5, i32 0, i32 1
%9 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call11, 1
store %"struct.std::_Rb_tree_node_base"* %9, %"struct.std::_Rb_tree_node_base"** %8, align 8
br label %return
if.else12: ; preds = %entry
%_M_impl13 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%10 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl13 to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare14 = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %10, i32 0, i32 0
%11 = load i8*, i8** %__k.addr, align 8
%_M_node15 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%12 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node15, align 8
%call16 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %12)
%call17 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare14, i8* dereferenceable(1) %11, i8* dereferenceable(1) %call16)
br i1 %call17, label %if.then18, label %if.else44
if.then18: ; preds = %if.else12
%13 = bitcast %"struct.std::_Rb_tree_iterator"* %__before to i8*
%14 = bitcast %"struct.std::_Rb_tree_iterator"* %__pos to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 8, i1 false)
%_M_node19 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%15 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node19, align 8
%call20 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_leftmostEv(%"class.std::_Rb_tree"* %this1)
%16 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %call20, align 8
%cmp21 = icmp eq %"struct.std::_Rb_tree_node_base"* %15, %16
br i1 %cmp21, label %if.then22, label %if.else25
if.then22: ; preds = %if.then18
%call23 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_leftmostEv(%"class.std::_Rb_tree"* %this1)
%call24 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_leftmostEv(%"class.std::_Rb_tree"* %this1)
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %call23, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %call24)
br label %return
if.else25: ; preds = %if.then18
%_M_impl26 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%17 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl26 to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare27 = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %17, i32 0, i32 0
%call28 = call dereferenceable(8) %"struct.std::_Rb_tree_iterator"* @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEmmEv(%"struct.std::_Rb_tree_iterator"* %__before)
%_M_node29 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %call28, i32 0, i32 0
%18 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node29, align 8
%call30 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %18)
%19 = load i8*, i8** %__k.addr, align 8
%call31 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare27, i8* dereferenceable(1) %call30, i8* dereferenceable(1) %19)
br i1 %call31, label %if.then32, label %if.else42
if.then32: ; preds = %if.else25
%_M_node33 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__before, i32 0, i32 0
%20 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node33, align 8
%call34 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %20)
%cmp35 = icmp eq %"struct.std::_Rb_tree_node"* %call34, null
br i1 %cmp35, label %if.then36, label %if.else39
if.then36: ; preds = %if.then32
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp37, align 8
%_M_node38 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__before, i32 0, i32 0
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp37, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node38)
br label %return
if.else39: ; preds = %if.then32
%_M_node40 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%_M_node41 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node40, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node41)
br label %return
if.else42: ; preds = %if.else25
%21 = load i8*, i8** %__k.addr, align 8
%call43 = call { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE24_M_get_insert_unique_posERS1_(%"class.std::_Rb_tree"* %this1, i8* dereferenceable(1) %21)
%22 = bitcast %"struct.std::pair.11"* %retval to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%23 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %22, i32 0, i32 0
%24 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call43, 0
store %"struct.std::_Rb_tree_node_base"* %24, %"struct.std::_Rb_tree_node_base"** %23, align 8
%25 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %22, i32 0, i32 1
%26 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call43, 1
store %"struct.std::_Rb_tree_node_base"* %26, %"struct.std::_Rb_tree_node_base"** %25, align 8
br label %return
if.else44: ; preds = %if.else12
%_M_impl45 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%27 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl45 to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare46 = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %27, i32 0, i32 0
%_M_node47 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%28 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node47, align 8
%call48 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %28)
%29 = load i8*, i8** %__k.addr, align 8
%call49 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare46, i8* dereferenceable(1) %call48, i8* dereferenceable(1) %29)
br i1 %call49, label %if.then50, label %if.else76
if.then50: ; preds = %if.else44
%30 = bitcast %"struct.std::_Rb_tree_iterator"* %__after to i8*
%31 = bitcast %"struct.std::_Rb_tree_iterator"* %__pos to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %30, i8* align 8 %31, i64 8, i1 false)
%_M_node51 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%32 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node51, align 8
%call52 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv(%"class.std::_Rb_tree"* %this1)
%33 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %call52, align 8
%cmp53 = icmp eq %"struct.std::_Rb_tree_node_base"* %32, %33
br i1 %cmp53, label %if.then54, label %if.else57
if.then54: ; preds = %if.then50
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp55, align 8
%call56 = call dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv(%"class.std::_Rb_tree"* %this1)
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp55, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %call56)
br label %return
if.else57: ; preds = %if.then50
%_M_impl58 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%34 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl58 to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare59 = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %34, i32 0, i32 0
%35 = load i8*, i8** %__k.addr, align 8
%call60 = call dereferenceable(8) %"struct.std::_Rb_tree_iterator"* @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv(%"struct.std::_Rb_tree_iterator"* %__after)
%_M_node61 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %call60, i32 0, i32 0
%36 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node61, align 8
%call62 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %36)
%call63 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare59, i8* dereferenceable(1) %35, i8* dereferenceable(1) %call62)
br i1 %call63, label %if.then64, label %if.else74
if.then64: ; preds = %if.else57
%_M_node65 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
%37 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node65, align 8
%call66 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %37)
%cmp67 = icmp eq %"struct.std::_Rb_tree_node"* %call66, null
br i1 %cmp67, label %if.then68, label %if.else71
if.then68: ; preds = %if.then64
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp69, align 8
%_M_node70 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp69, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node70)
br label %return
if.else71: ; preds = %if.then64
%_M_node72 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__after, i32 0, i32 0
%_M_node73 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__after, i32 0, i32 0
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node72, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node73)
br label %return
if.else74: ; preds = %if.else57
%38 = load i8*, i8** %__k.addr, align 8
%call75 = call { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE24_M_get_insert_unique_posERS1_(%"class.std::_Rb_tree"* %this1, i8* dereferenceable(1) %38)
%39 = bitcast %"struct.std::pair.11"* %retval to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%40 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %39, i32 0, i32 0
%41 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call75, 0
store %"struct.std::_Rb_tree_node_base"* %41, %"struct.std::_Rb_tree_node_base"** %40, align 8
%42 = getelementptr inbounds { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %39, i32 0, i32 1
%43 = extractvalue { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %call75, 1
store %"struct.std::_Rb_tree_node_base"* %43, %"struct.std::_Rb_tree_node_base"** %42, align 8
br label %return
if.else76: ; preds = %if.else44
%_M_node77 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__pos, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp78, align 8
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node77, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp78)
br label %return
return: ; preds = %if.else76, %if.else74, %if.else71, %if.then68, %if.then54, %if.else42, %if.else39, %if.then36, %if.then22, %if.else, %if.then9
%44 = bitcast %"struct.std::pair.11"* %retval to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%45 = load { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %44, align 8
ret { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %45
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE10_M_insert_INSB_11_Alloc_nodeEEESt17_Rb_tree_iteratorIS5_EPSt18_Rb_tree_node_baseSH_RKS5_RT_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"* %__p, %"struct.std::pair"* dereferenceable(48) %__v, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* dereferenceable(8) %__node_gen) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__p.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__v.addr = alloca %"struct.std::pair"*, align 8
%__node_gen.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, align 8
%__insert_left = alloca i8, align 1
%ref.tmp = alloca %"struct.std::_Select1st", align 1
%__z = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
store %"struct.std::_Rb_tree_node_base"* %__p, %"struct.std::_Rb_tree_node_base"** %__p.addr, align 8
store %"struct.std::pair"* %__v, %"struct.std::pair"** %__v.addr, align 8
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %__node_gen, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %__node_gen.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%cmp = icmp ne %"struct.std::_Rb_tree_node_base"* %0, null
br i1 %cmp, label %lor.end, label %lor.lhs.false
lor.lhs.false: ; preds = %entry
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__p.addr, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv(%"class.std::_Rb_tree"* %this1)
%cmp2 = icmp eq %"struct.std::_Rb_tree_node_base"* %1, %call
br i1 %cmp2, label %lor.end, label %lor.rhs
lor.rhs: ; preds = %lor.lhs.false
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%2 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %2, i32 0, i32 0
%3 = load %"struct.std::pair"*, %"struct.std::pair"** %__v.addr, align 8
%call3 = call dereferenceable(1) i8* @_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_(%"struct.std::_Select1st"* %ref.tmp, %"struct.std::pair"* dereferenceable(48) %3)
%4 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__p.addr, align 8
%call4 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %4)
%call5 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare, i8* dereferenceable(1) %call3, i8* dereferenceable(1) %call4)
br label %lor.end
lor.end: ; preds = %lor.rhs, %lor.lhs.false, %entry
%5 = phi i1 [ true, %lor.lhs.false ], [ true, %entry ], [ %call5, %lor.rhs ]
%frombool = zext i1 %5 to i8
store i8 %frombool, i8* %__insert_left, align 1
%6 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %__node_gen.addr, align 8
%7 = load %"struct.std::pair"*, %"struct.std::pair"** %__v.addr, align 8
%call6 = call %"struct.std::_Rb_tree_node"* @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeclIS5_EEPSt13_Rb_tree_nodeIS5_ERKT_(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %6, %"struct.std::pair"* dereferenceable(48) %7)
store %"struct.std::_Rb_tree_node"* %call6, %"struct.std::_Rb_tree_node"** %__z, align 8
%8 = load i8, i8* %__insert_left, align 1
%tobool = trunc i8 %8 to i1
%9 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__z, align 8
%10 = bitcast %"struct.std::_Rb_tree_node"* %9 to %"struct.std::_Rb_tree_node_base"*
%11 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__p.addr, align 8
%_M_impl7 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%12 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl7 to i8*
%add.ptr = getelementptr inbounds i8, i8* %12, i64 8
%13 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %13, i32 0, i32 0
call void @_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_(i1 zeroext %tobool, %"struct.std::_Rb_tree_node_base"* %10, %"struct.std::_Rb_tree_node_base"* %11, %"struct.std::_Rb_tree_node_base"* dereferenceable(32) %_M_header) #3
%_M_impl8 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%14 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl8 to i8*
%add.ptr9 = getelementptr inbounds i8, i8* %14, i64 8
%15 = bitcast i8* %add.ptr9 to %"struct.std::_Rb_tree_header"*
%_M_node_count = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %15, i32 0, i32 1
%16 = load i64, i64* %_M_node_count, align 8
%inc = add i64 %16, 1
store i64 %inc, i64* %_M_node_count, align 8
%17 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__z, align 8
%18 = bitcast %"struct.std::_Rb_tree_node"* %17 to %"struct.std::_Rb_tree_node_base"*
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %18)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%19 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
ret %"struct.std::_Rb_tree_node_base"* %19
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node_base"* @_ZNKSt23_Rb_tree_const_iteratorISt4pairIKhSt6vectorIbSaIbEEEE13_M_const_castEv(%"struct.std::_Rb_tree_const_iterator"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Rb_tree_iterator", align 8
%this.addr = alloca %"struct.std::_Rb_tree_const_iterator"*, align 8
store %"struct.std::_Rb_tree_const_iterator"* %this, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_const_iterator"*, %"struct.std::_Rb_tree_const_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_const_iterator", %"struct.std::_Rb_tree_const_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %retval, %"struct.std::_Rb_tree_node_base"* %0)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %retval, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
ret %"struct.std::_Rb_tree_node_base"* %1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE4sizeEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_node_count = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 1
%2 = load i64, i64* %_M_node_count, align 8
ret i64 %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %__x) #0 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%ref.tmp = alloca %"struct.std::_Select1st", align 1
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%call = call dereferenceable(48) %"struct.std::pair"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %0)
%call1 = call dereferenceable(1) i8* @_ZNKSt10_Select1stISt4pairIKhSt6vectorIbSaIbEEEEclERKS5_(%"struct.std::_Select1st"* %ref.tmp, %"struct.std::pair"* dereferenceable(48) %call)
ret i8* %call1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE12_M_rightmostEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
%_M_right = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header, i32 0, i32 3
ret %"struct.std::_Rb_tree_node_base"** %_M_right
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %this, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %__a, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %__b) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::pair.11"*, align 8
%__a.addr = alloca %"struct.std::_Rb_tree_node_base"**, align 8
%__b.addr = alloca %"struct.std::_Rb_tree_node_base"**, align 8
store %"struct.std::pair.11"* %this, %"struct.std::pair.11"** %this.addr, align 8
store %"struct.std::_Rb_tree_node_base"** %__a, %"struct.std::_Rb_tree_node_base"*** %__a.addr, align 8
store %"struct.std::_Rb_tree_node_base"** %__b, %"struct.std::_Rb_tree_node_base"*** %__b.addr, align 8
%this1 = load %"struct.std::pair.11"*, %"struct.std::pair.11"** %this.addr, align 8
%0 = bitcast %"struct.std::pair.11"* %this1 to %"class.std::__pair_base.12"*
%first = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %this1, i32 0, i32 0
%1 = load %"struct.std::_Rb_tree_node_base"**, %"struct.std::_Rb_tree_node_base"*** %__a.addr, align 8
%2 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %1, align 8
store %"struct.std::_Rb_tree_node_base"* %2, %"struct.std::_Rb_tree_node_base"** %first, align 8
%second = getelementptr inbounds %"struct.std::pair.11", %"struct.std::pair.11"* %this1, i32 0, i32 1
%3 = load %"struct.std::_Rb_tree_node_base"**, %"struct.std::_Rb_tree_node_base"*** %__b.addr, align 8
%4 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %3, align 8
store %"struct.std::_Rb_tree_node_base"* %4, %"struct.std::_Rb_tree_node_base"** %second, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE24_M_get_insert_unique_posERS1_(%"class.std::_Rb_tree"* %this, i8* dereferenceable(1) %__k) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::pair.11", align 8
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__k.addr = alloca i8*, align 8
%__x = alloca %"struct.std::_Rb_tree_node"*, align 8
%__y = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%__comp = alloca i8, align 1
%__j = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp = alloca %"struct.std::_Rb_tree_iterator", align 8
%ref.tmp11 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%ref.tmp19 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
%ref.tmp22 = alloca %"struct.std::_Rb_tree_node_base"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store i8* %__k, i8** %__k.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_M_beginEv(%"class.std::_Rb_tree"* %this1)
store %"struct.std::_Rb_tree_node"* %call, %"struct.std::_Rb_tree_node"** %__x, align 8
%call2 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_M_endEv(%"class.std::_Rb_tree"* %this1)
store %"struct.std::_Rb_tree_node_base"* %call2, %"struct.std::_Rb_tree_node_base"** %__y, align 8
store i8 1, i8* %__comp, align 1
br label %while.cond
while.cond: ; preds = %cond.end, %entry
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%cmp = icmp ne %"struct.std::_Rb_tree_node"* %0, null
br i1 %cmp, label %while.body, label %while.end
while.body: ; preds = %while.cond
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%2 = bitcast %"struct.std::_Rb_tree_node"* %1 to %"struct.std::_Rb_tree_node_base"*
store %"struct.std::_Rb_tree_node_base"* %2, %"struct.std::_Rb_tree_node_base"** %__y, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%3 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %3, i32 0, i32 0
%4 = load i8*, i8** %__k.addr, align 8
%5 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%call3 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt13_Rb_tree_nodeIS5_E(%"struct.std::_Rb_tree_node"* %5)
%call4 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare, i8* dereferenceable(1) %4, i8* dereferenceable(1) %call3)
%frombool = zext i1 %call4 to i8
store i8 %frombool, i8* %__comp, align 1
%6 = load i8, i8* %__comp, align 1
%tobool = trunc i8 %6 to i1
br i1 %tobool, label %cond.true, label %cond.false
cond.true: ; preds = %while.body
%7 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%8 = bitcast %"struct.std::_Rb_tree_node"* %7 to %"struct.std::_Rb_tree_node_base"*
%call5 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE7_S_leftEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %8)
br label %cond.end
cond.false: ; preds = %while.body
%9 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%10 = bitcast %"struct.std::_Rb_tree_node"* %9 to %"struct.std::_Rb_tree_node_base"*
%call6 = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_rightEPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %10)
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi %"struct.std::_Rb_tree_node"* [ %call5, %cond.true ], [ %call6, %cond.false ]
store %"struct.std::_Rb_tree_node"* %cond, %"struct.std::_Rb_tree_node"** %__x, align 8
br label %while.cond
while.end: ; preds = %while.cond
%11 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__y, align 8
call void @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEC2EPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_iterator"* %__j, %"struct.std::_Rb_tree_node_base"* %11)
%12 = load i8, i8* %__comp, align 1
%tobool7 = trunc i8 %12 to i1
br i1 %tobool7, label %if.then, label %if.end13
if.then: ; preds = %while.end
%call8 = call %"struct.std::_Rb_tree_node_base"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE5beginEv(%"class.std::_Rb_tree"* %this1)
%coerce.dive = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %ref.tmp, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call8, %"struct.std::_Rb_tree_node_base"** %coerce.dive, align 8
%call9 = call zeroext i1 @_ZNKSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEeqERKS6_(%"struct.std::_Rb_tree_iterator"* %__j, %"struct.std::_Rb_tree_iterator"* dereferenceable(8) %ref.tmp)
br i1 %call9, label %if.then10, label %if.else
if.then10: ; preds = %if.then
%13 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%14 = bitcast %"struct.std::_Rb_tree_node"* %13 to %"struct.std::_Rb_tree_node_base"*
store %"struct.std::_Rb_tree_node_base"* %14, %"struct.std::_Rb_tree_node_base"** %ref.tmp11, align 8
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp11, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %__y)
br label %return
if.else: ; preds = %if.then
%call12 = call dereferenceable(8) %"struct.std::_Rb_tree_iterator"* @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEmmEv(%"struct.std::_Rb_tree_iterator"* %__j)
br label %if.end
if.end: ; preds = %if.else
br label %if.end13
if.end13: ; preds = %if.end, %while.end
%_M_impl14 = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%15 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl14 to %"struct.std::_Rb_tree_key_compare"*
%_M_key_compare15 = getelementptr inbounds %"struct.std::_Rb_tree_key_compare", %"struct.std::_Rb_tree_key_compare"* %15, i32 0, i32 0
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__j, i32 0, i32 0
%16 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%call16 = call dereferenceable(1) i8* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE6_S_keyEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %16)
%17 = load i8*, i8** %__k.addr, align 8
%call17 = call zeroext i1 @_ZNKSt4lessIhEclERKhS2_(%"struct.std::less"* %_M_key_compare15, i8* dereferenceable(1) %call16, i8* dereferenceable(1) %17)
br i1 %call17, label %if.then18, label %if.end20
if.then18: ; preds = %if.end13
%18 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__x, align 8
%19 = bitcast %"struct.std::_Rb_tree_node"* %18 to %"struct.std::_Rb_tree_node_base"*
store %"struct.std::_Rb_tree_node_base"* %19, %"struct.std::_Rb_tree_node_base"** %ref.tmp19, align 8
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp19, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %__y)
br label %return
if.end20: ; preds = %if.end13
%_M_node21 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %__j, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* null, %"struct.std::_Rb_tree_node_base"** %ref.tmp22, align 8
call void @_ZNSt4pairIPSt18_Rb_tree_node_baseS1_EC2ERKS1_S4_(%"struct.std::pair.11"* %retval, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %_M_node21, %"struct.std::_Rb_tree_node_base"** dereferenceable(8) %ref.tmp22)
br label %return
return: ; preds = %if.end20, %if.then18, %if.then10
%20 = bitcast %"struct.std::pair.11"* %retval to { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }*
%21 = load { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }, { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }* %20, align 8
ret { %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* } %21
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"struct.std::_Rb_tree_node_base"** @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_leftmostEv(%"class.std::_Rb_tree"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"class.std::_Rb_tree", %"class.std::_Rb_tree"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Rb_tree_impl"* %_M_impl to i8*
%add.ptr = getelementptr inbounds i8, i8* %0, i64 8
%1 = bitcast i8* %add.ptr to %"struct.std::_Rb_tree_header"*
%_M_header = getelementptr inbounds %"struct.std::_Rb_tree_header", %"struct.std::_Rb_tree_header"* %1, i32 0, i32 0
%_M_left = getelementptr inbounds %"struct.std::_Rb_tree_node_base", %"struct.std::_Rb_tree_node_base"* %_M_header, i32 0, i32 2
ret %"struct.std::_Rb_tree_node_base"** %_M_left
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"struct.std::_Rb_tree_iterator"* @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEmmEv(%"struct.std::_Rb_tree_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
store %"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %0) #10
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
ret %"struct.std::_Rb_tree_iterator"* %this1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(8) %"struct.std::_Rb_tree_iterator"* @_ZNSt17_Rb_tree_iteratorISt4pairIKhSt6vectorIbSaIbEEEEppEv(%"struct.std::_Rb_tree_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree_iterator"*, align 8
store %"struct.std::_Rb_tree_iterator"* %this, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Rb_tree_iterator"*, %"struct.std::_Rb_tree_iterator"** %this.addr, align 8
%_M_node = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %_M_node, align 8
%call = call %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %0) #10
%_M_node2 = getelementptr inbounds %"struct.std::_Rb_tree_iterator", %"struct.std::_Rb_tree_iterator"* %this1, i32 0, i32 0
store %"struct.std::_Rb_tree_node_base"* %call, %"struct.std::_Rb_tree_node_base"** %_M_node2, align 8
ret %"struct.std::_Rb_tree_iterator"* %this1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(48) %"struct.std::pair"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE8_S_valueEPKSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"* %__x) #0 comdat align 2 {
entry:
%__x.addr = alloca %"struct.std::_Rb_tree_node_base"*, align 8
store %"struct.std::_Rb_tree_node_base"* %__x, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%0 = load %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"** %__x.addr, align 8
%1 = bitcast %"struct.std::_Rb_tree_node_base"* %0 to %"struct.std::_Rb_tree_node"*
%call = call %"struct.std::pair"* @_ZNKSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %1)
ret %"struct.std::pair"* %call
}
; Function Attrs: nounwind readonly
declare dso_local %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"*) #14
; Function Attrs: nounwind readonly
declare dso_local %"struct.std::_Rb_tree_node_base"* @_ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base(%"struct.std::_Rb_tree_node_base"*) #14
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_Alloc_nodeclIS5_EEPSt13_Rb_tree_nodeIS5_ERKT_(%"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this, %"struct.std::pair"* dereferenceable(48) %__arg) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, align 8
%__arg.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %this.addr, align 8
store %"struct.std::pair"* %__arg, %"struct.std::pair"** %__arg.addr, align 8
%this1 = load %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"*, %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"** %this.addr, align 8
%_M_t = getelementptr inbounds %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node", %"struct.std::_Rb_tree<unsigned char, std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > >, std::_Select1st<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > >, std::less<unsigned char>, std::allocator<std::pair<const unsigned char, std::vector<bool, std::allocator<bool> > > > >::_Alloc_node"* %this1, i32 0, i32 0
%0 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %_M_t, align 8
%1 = load %"struct.std::pair"*, %"struct.std::pair"** %__arg.addr, align 8
%call = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_create_nodeERKS5_(%"class.std::_Rb_tree"* %0, %"struct.std::pair"* dereferenceable(48) %1)
ret %"struct.std::_Rb_tree_node"* %call
}
; Function Attrs: nounwind
declare dso_local void @_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_(i1 zeroext, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* dereferenceable(32)) #11
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE14_M_create_nodeERKS5_(%"class.std::_Rb_tree"* %this, %"struct.std::pair"* dereferenceable(48) %__x) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__x.addr = alloca %"struct.std::pair"*, align 8
%__tmp = alloca %"struct.std::_Rb_tree_node"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::pair"* %__x, %"struct.std::pair"** %__x.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_get_nodeEv(%"class.std::_Rb_tree"* %this1)
store %"struct.std::_Rb_tree_node"* %call, %"struct.std::_Rb_tree_node"** %__tmp, align 8
%0 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__tmp, align 8
%1 = load %"struct.std::pair"*, %"struct.std::pair"** %__x.addr, align 8
call void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_construct_nodeEPSt13_Rb_tree_nodeIS5_ERKS5_(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %0, %"struct.std::pair"* dereferenceable(48) %1)
%2 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__tmp, align 8
ret %"struct.std::_Rb_tree_node"* %2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_get_nodeEv(%"class.std::_Rb_tree"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
%call = call dereferenceable(1) %"class.std::allocator.4"* @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE21_M_get_Node_allocatorEv(%"class.std::_Rb_tree"* %this1)
%call2 = call %"struct.std::_Rb_tree_node"* @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE8allocateERS9_m(%"class.std::allocator.4"* dereferenceable(1) %call, i64 1)
ret %"struct.std::_Rb_tree_node"* %call2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE17_M_construct_nodeEPSt13_Rb_tree_nodeIS5_ERKS5_(%"class.std::_Rb_tree"* %this, %"struct.std::_Rb_tree_node"* %__node, %"struct.std::pair"* dereferenceable(48) %__x) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"class.std::_Rb_tree"*, align 8
%__node.addr = alloca %"struct.std::_Rb_tree_node"*, align 8
%__x.addr = alloca %"struct.std::pair"*, align 8
%ref.tmp = alloca %"class.std::allocator.7", align 1
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"class.std::_Rb_tree"* %this, %"class.std::_Rb_tree"** %this.addr, align 8
store %"struct.std::_Rb_tree_node"* %__node, %"struct.std::_Rb_tree_node"** %__node.addr, align 8
store %"struct.std::pair"* %__x, %"struct.std::pair"** %__x.addr, align 8
%this1 = load %"class.std::_Rb_tree"*, %"class.std::_Rb_tree"** %this.addr, align 8
invoke void @_ZNKSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE13get_allocatorEv(%"class.std::allocator.7"* sret %ref.tmp, %"class.std::_Rb_tree"* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%0 = bitcast %"class.std::allocator.7"* %ref.tmp to %"class.__gnu_cxx::new_allocator.8"*
%1 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__node.addr, align 8
%call = invoke %"struct.std::pair"* @_ZNSt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEE9_M_valptrEv(%"struct.std::_Rb_tree_node"* %1)
to label %invoke.cont3 unwind label %lpad2
invoke.cont3: ; preds = %invoke.cont
%2 = load %"struct.std::pair"*, %"struct.std::pair"** %__x.addr, align 8
invoke void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE9constructEPS6_RKS6_(%"class.__gnu_cxx::new_allocator.8"* %0, %"struct.std::pair"* %call, %"struct.std::pair"* dereferenceable(48) %2)
to label %invoke.cont4 unwind label %lpad2
invoke.cont4: ; preds = %invoke.cont3
call void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.std::allocator.7"* %ref.tmp) #3
br label %try.cont
lpad: ; preds = %entry
%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
br label %catch
lpad2: ; preds = %invoke.cont3, %invoke.cont
%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
call void @_ZNSaISt4pairIKhSt6vectorIbSaIbEEEED2Ev(%"class.std::allocator.7"* %ref.tmp) #3
br label %catch
catch: ; preds = %lpad2, %lpad
%exn = load i8*, i8** %exn.slot, align 8
%9 = call i8* @__cxa_begin_catch(i8* %exn) #3
%10 = load %"struct.std::_Rb_tree_node"*, %"struct.std::_Rb_tree_node"** %__node.addr, align 8
invoke void @_ZNSt8_Rb_treeIhSt4pairIKhSt6vectorIbSaIbEEESt10_Select1stIS5_ESt4lessIhESaIS5_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS5_E(%"class.std::_Rb_tree"* %this1, %"struct.std::_Rb_tree_node"* %10)
to label %invoke.cont6 unwind label %lpad5
invoke.cont6: ; preds = %catch
invoke void @__cxa_rethrow() #19
to label %unreachable unwind label %lpad5
lpad5: ; preds = %invoke.cont6, %catch
%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
invoke void @__cxa_end_catch()
to label %invoke.cont7 unwind label %terminate.lpad
invoke.cont7: ; preds = %lpad5
br label %eh.resume
try.cont: ; preds = %invoke.cont4
ret void
eh.resume: ; preds = %invoke.cont7
%exn8 = load i8*, i8** %exn.slot, align 8
%sel = load i32, i32* %ehselector.slot, align 4
%lpad.val = insertvalue { i8*, i32 } undef, i8* %exn8, 0
%lpad.val9 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
resume { i8*, i32 } %lpad.val9
terminate.lpad: ; preds = %lpad5
%14 = landingpad { i8*, i32 }
catch i8* null
%15 = extractvalue { i8*, i32 } %14, 0
call void @__clang_call_terminate(i8* %15) #16
unreachable
unreachable: ; preds = %invoke.cont6
unreachable
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZN9__gnu_cxx14__alloc_traitsISaISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEEE8allocateERS9_m(%"class.std::allocator.4"* dereferenceable(1) %__a, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.4"*, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator.4"* %__a, %"class.std::allocator.4"** %__a.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator.4"*, %"class.std::allocator.4"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator.4"* %0 to %"class.__gnu_cxx::new_allocator.5"*
%2 = load i64, i64* %__n.addr, align 8
%call = call %"struct.std::_Rb_tree_node"* @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.5"* %1, i64 %2, i8* null)
ret %"struct.std::_Rb_tree_node"* %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local %"struct.std::_Rb_tree_node"* @_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.5"* %this, i64 %__n, i8* %0) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.5"*, align 8
%__n.addr = alloca i64, align 8
%.addr = alloca i8*, align 8
store %"class.__gnu_cxx::new_allocator.5"* %this, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store i8* %0, i8** %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.5"*, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
%1 = load i64, i64* %__n.addr, align 8
%call = call i64 @_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.5"* %this1) #3
%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() #19
unreachable
if.end: ; preds = %entry
%2 = load i64, i64* %__n.addr, align 8
%mul = mul i64 %2, 80
%call2 = call i8* @_Znwm(i64 %mul)
%3 = bitcast i8* %call2 to %"struct.std::_Rb_tree_node"*
ret %"struct.std::_Rb_tree_node"* %3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNK9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKhSt6vectorIbSaIbEEEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.5"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.5"*, align 8
store %"class.__gnu_cxx::new_allocator.5"* %this, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.5"*, %"class.__gnu_cxx::new_allocator.5"** %this.addr, align 8
ret i64 230584300921369395
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorISt4pairIKhSt6vectorIbSaIbEEEE9constructEPS6_RKS6_(%"class.__gnu_cxx::new_allocator.8"* %this, %"struct.std::pair"* %__p, %"struct.std::pair"* dereferenceable(48) %__val) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.8"*, align 8
%__p.addr = alloca %"struct.std::pair"*, align 8
%__val.addr = alloca %"struct.std::pair"*, align 8
store %"class.__gnu_cxx::new_allocator.8"* %this, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
store %"struct.std::pair"* %__p, %"struct.std::pair"** %__p.addr, align 8
store %"struct.std::pair"* %__val, %"struct.std::pair"** %__val.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.8"*, %"class.__gnu_cxx::new_allocator.8"** %this.addr, align 8
%0 = load %"struct.std::pair"*, %"struct.std::pair"** %__p.addr, align 8
%1 = bitcast %"struct.std::pair"* %0 to i8*
%2 = bitcast i8* %1 to %"struct.std::pair"*
%3 = load %"struct.std::pair"*, %"struct.std::pair"** %__val.addr, align 8
call void @_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERKS4_(%"struct.std::pair"* %2, %"struct.std::pair"* dereferenceable(48) %3)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt4pairIKhSt6vectorIbSaIbEEEC2ERKS4_(%"struct.std::pair"* %this, %"struct.std::pair"* dereferenceable(48) %0) unnamed_addr #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::pair"*, align 8
%.addr = alloca %"struct.std::pair"*, align 8
store %"struct.std::pair"* %this, %"struct.std::pair"** %this.addr, align 8
store %"struct.std::pair"* %0, %"struct.std::pair"** %.addr, align 8
%this1 = load %"struct.std::pair"*, %"struct.std::pair"** %this.addr, align 8
%1 = bitcast %"struct.std::pair"* %this1 to %"class.std::__pair_base"*
%2 = load %"struct.std::pair"*, %"struct.std::pair"** %.addr, align 8
%3 = bitcast %"struct.std::pair"* %2 to %"class.std::__pair_base"*
%first = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 0
%4 = load %"struct.std::pair"*, %"struct.std::pair"** %.addr, align 8
%first2 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %4, i32 0, i32 0
%5 = load i8, i8* %first2, align 8
store i8 %5, i8* %first, align 8
%second = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %this1, i32 0, i32 1
%6 = load %"struct.std::pair"*, %"struct.std::pair"** %.addr, align 8
%second3 = getelementptr inbounds %"struct.std::pair", %"struct.std::pair"* %6, i32 0, i32 1
call void @_ZNSt6vectorIbSaIbEEC2ERKS1_(%"class.std::vector.0"* %second, %"class.std::vector.0"* dereferenceable(40) %second3)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%ref.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%ref.tmp2 = alloca %"struct.std::_Bit_const_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%call = call { i64*, i32 } @_ZNKSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %this1)
%0 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
%2 = extractvalue { i64*, i32 } %call, 0
store i64* %2, i64** %1, align 8
%3 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
%4 = extractvalue { i64*, i32 } %call, 1
store i32 %4, i32* %3, align 8
%5 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp to %"struct.std::_Bit_iterator_base"*
%call3 = call { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this1)
%6 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp2 to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
%8 = extractvalue { i64*, i32 } %call3, 0
store i64* %8, i64** %7, align 8
%9 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
%10 = extractvalue { i64*, i32 } %call3, 1
store i32 %10, i32* %9, align 8
%11 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp2 to %"struct.std::_Bit_iterator_base"*
%call4 = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %5, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %11)
ret i64 %call4
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIbSaIbEE8capacityEv(%"class.std::vector.0"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%ref.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%ref.tmp2 = alloca %"struct.std::_Bit_const_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%call = call i64* @_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl)
call void @_ZNSt19_Bit_const_iteratorC2EPmj(%"struct.std::_Bit_const_iterator"* %ref.tmp, i64* %call, i32 0)
%1 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp to %"struct.std::_Bit_iterator_base"*
%call3 = call { i64*, i32 } @_ZNKSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this1)
%2 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp2 to { i64*, i32 }*
%3 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %2, i32 0, i32 0
%4 = extractvalue { i64*, i32 } %call3, 0
store i64* %4, i64** %3, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %2, i32 0, i32 1
%6 = extractvalue { i64*, i32 } %call3, 1
store i32 %6, i32* %5, align 8
%7 = bitcast %"struct.std::_Bit_const_iterator"* %ref.tmp2 to %"struct.std::_Bit_iterator_base"*
%call4 = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %1, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %7)
ret i64 %call4
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv(%"struct.std::_Bvector_base"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
%__n = alloca i64, align 8
%ref.tmp = alloca %"struct.std::_Bit_iterator", align 8
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 0
%0 = bitcast %"struct.std::_Bit_iterator"* %_M_start to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %0, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%tobool = icmp ne i64* %1, null
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
%_M_impl2 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%call = call i64* @_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl2)
%_M_impl3 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_start4 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl3, i32 0, i32 0
%2 = bitcast %"struct.std::_Bit_iterator"* %_M_start4 to %"struct.std::_Bit_iterator_base"*
%_M_p5 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %2, i32 0, i32 0
%3 = load i64*, i64** %_M_p5, align 8
%sub.ptr.lhs.cast = ptrtoint i64* %call 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
store i64 %sub.ptr.div, i64* %__n, align 8
%_M_impl6 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%4 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl6 to %"class.std::allocator.1"*
%_M_impl7 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl7, i32 0, i32 2
%5 = load i64*, i64** %_M_end_of_storage, align 8
%6 = load i64, i64* %__n, align 8
%idx.neg = sub i64 0, %6
%add.ptr = getelementptr inbounds i64, i64* %5, i64 %idx.neg
%7 = load i64, i64* %__n, align 8
call void @_ZN9__gnu_cxx14__alloc_traitsISaImEE10deallocateERS1_Pmm(%"class.std::allocator.1"* dereferenceable(1) %4, i64* %add.ptr, i64 %7)
call void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %ref.tmp)
%_M_impl8 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl8, i32 0, i32 1
%8 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to i8*
%9 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %8, i8* align 8 %9, i64 12, i1 false)
%_M_impl9 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_start10 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl9, i32 0, i32 0
%10 = bitcast %"struct.std::_Bit_iterator"* %_M_start10 to i8*
%11 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %10, i8* align 8 %11, i64 12, i1 false)
%_M_impl11 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%_M_end_of_storage12 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl11, i32 0, i32 2
store i64* null, i64** %_M_end_of_storage12, align 8
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEE13_M_initializeEm(%"class.std::vector.0"* %this, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__n.addr = alloca i64, align 8
%__q = alloca i64*, align 8
%ref.tmp = alloca %"struct.std::_Bit_iterator", align 8
%ref.tmp7 = alloca %"struct.std::_Bit_iterator", align 8
%ref.tmp10 = alloca %"struct.std::_Bit_iterator", align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = load i64, i64* %__n.addr, align 8
%tobool = icmp ne i64 %0, 0
br i1 %tobool, label %if.then, label %if.else
if.then: ; preds = %entry
%1 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%2 = load i64, i64* %__n.addr, align 8
%call = call i64* @_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm(%"struct.std::_Bvector_base"* %1, i64 %2)
store i64* %call, i64** %__q, align 8
%3 = load i64*, i64** %__q, align 8
%4 = load i64, i64* %__n.addr, align 8
%call2 = call i64 @_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm(i64 %4)
%add.ptr = getelementptr inbounds i64, i64* %3, i64 %call2
%5 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %5, i32 0, i32 0
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 2
store i64* %add.ptr, i64** %_M_end_of_storage, align 8
%6 = load i64*, i64** %__q, align 8
%call3 = call i64* @_ZSt11__addressofImEPT_RS0_(i64* dereferenceable(8) %6)
call void @_ZNSt13_Bit_iteratorC2EPmj(%"struct.std::_Bit_iterator"* %ref.tmp, i64* %call3, i32 0)
%7 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl4 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %7, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl4, i32 0, i32 0
%8 = bitcast %"struct.std::_Bit_iterator"* %_M_start to i8*
%9 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %8, i8* align 8 %9, i64 12, i1 false)
br label %if.end
if.else: ; preds = %entry
%10 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl5 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %10, i32 0, i32 0
%_M_end_of_storage6 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl5, i32 0, i32 2
store i64* null, i64** %_M_end_of_storage6, align 8
call void @_ZNSt13_Bit_iteratorC2EPmj(%"struct.std::_Bit_iterator"* %ref.tmp7, i64* null, i32 0)
%11 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl8 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %11, i32 0, i32 0
%_M_start9 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl8, i32 0, i32 0
%12 = bitcast %"struct.std::_Bit_iterator"* %_M_start9 to i8*
%13 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp7 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %12, i8* align 8 %13, i64 12, i1 false)
br label %if.end
if.end: ; preds = %if.else, %if.then
%14 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl11 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %14, i32 0, i32 0
%_M_start12 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl11, i32 0, i32 0
%15 = load i64, i64* %__n.addr, align 8
%call13 = call { i64*, i32 } @_ZNKSt13_Bit_iteratorplEl(%"struct.std::_Bit_iterator"* %_M_start12, i64 %15)
%16 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp10 to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call13, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call13, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl14 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %21, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl14, i32 0, i32 1
%22 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to i8*
%23 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp10 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %22, i8* align 8 %23, i64 12, i1 false)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt6vectorIbSaIbEE15_M_copy_alignedESt19_Bit_const_iteratorS2_St13_Bit_iterator(%"class.std::vector.0"* %this, i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, %"struct.std::_Bit_iterator"* byval(%"struct.std::_Bit_iterator") align 8 %__result) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
%__q = alloca i64*, align 8
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp6 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%6 = bitcast %"struct.std::_Bit_const_iterator"* %__first to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %6, i32 0, i32 0
%7 = load i64*, i64** %_M_p, align 8
%8 = bitcast %"struct.std::_Bit_const_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%_M_p2 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %8, i32 0, i32 0
%9 = load i64*, i64** %_M_p2, align 8
%10 = bitcast %"struct.std::_Bit_iterator"* %__result to %"struct.std::_Bit_iterator_base"*
%_M_p3 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %10, i32 0, i32 0
%11 = load i64*, i64** %_M_p3, align 8
%call = call i64* @_ZSt4copyIPmS0_ET0_T_S2_S1_(i64* %7, i64* %9, i64* %11)
store i64* %call, i64** %__q, align 8
%12 = bitcast %"struct.std::_Bit_const_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%_M_p4 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %12, i32 0, i32 0
%13 = load i64*, i64** %_M_p4, align 8
call void @_ZNSt19_Bit_const_iteratorC2EPmj(%"struct.std::_Bit_const_iterator"* %agg.tmp, i64* %13, i32 0)
%14 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp5 to i8*
%15 = bitcast %"struct.std::_Bit_const_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %14, i8* align 8 %15, i64 16, i1 false)
%16 = load i64*, i64** %__q, align 8
call void @_ZNSt13_Bit_iteratorC2EPmj(%"struct.std::_Bit_iterator"* %agg.tmp6, i64* %16, i32 0)
%17 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%18 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %17, i32 0, i32 0
%19 = load i64*, i64** %18, align 8
%20 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %17, i32 0, i32 1
%21 = load i32, i32* %20, align 8
%22 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp5 to { i64*, i32 }*
%23 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %22, i32 0, i32 0
%24 = load i64*, i64** %23, align 8
%25 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %22, i32 0, i32 1
%26 = load i32, i32* %25, align 8
%27 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%28 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %27, i32 0, i32 0
%29 = load i64*, i64** %28, align 8
%30 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %27, i32 0, i32 1
%31 = load i32, i32* %30, align 8
%call7 = call { i64*, i32 } @_ZSt4copyISt19_Bit_const_iteratorSt13_Bit_iteratorET0_T_S3_S2_(i64* %19, i32 %21, i64* %24, i32 %26, i64* %29, i32 %31)
%32 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%33 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %32, i32 0, i32 0
%34 = extractvalue { i64*, i32 } %call7, 0
store i64* %34, i64** %33, align 8
%35 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %32, i32 0, i32 1
%36 = extractvalue { i64*, i32 } %call7, 1
store i32 %36, i32* %35, align 8
%37 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%38 = load { i64*, i32 }, { i64*, i32 }* %37, align 8
ret { i64*, i32 } %38
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this) #6 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 0
%1 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%2 = bitcast %"struct.std::_Bit_iterator"* %_M_start to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %1, i8* align 8 %2, i64 16, i1 false)
%3 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%4 = load { i64*, i32 }, { i64*, i32 }* %3, align 8
ret { i64*, i32 } %4
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this) #0 comdat align 2 {
entry:
%retval = alloca i64*, align 8
%this.addr = alloca %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, align 8
store %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 2
%0 = load i64*, i64** %_M_end_of_storage, align 8
%tobool = icmp ne i64* %0, null
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
%_M_end_of_storage2 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 2
%1 = load i64*, i64** %_M_end_of_storage2, align 8
%arrayidx = getelementptr inbounds i64, i64* %1, i64 -1
%call = call i64* @_ZSt11__addressofImEPT_RS0_(i64* dereferenceable(8) %arrayidx)
%add.ptr = getelementptr inbounds i64, i64* %call, i64 1
store i64* %add.ptr, i64** %retval, align 8
br label %return
if.end: ; preds = %entry
store i64* null, i64** %retval, align 8
br label %return
return: ; preds = %if.end, %if.then
%2 = load i64*, i64** %retval, align 8
ret i64* %2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64* @_ZSt11__addressofImEPT_RS0_(i64* dereferenceable(8) %__r) #6 comdat {
entry:
%__r.addr = alloca i64*, align 8
store i64* %__r, i64** %__r.addr, align 8
%0 = load i64*, i64** %__r.addr, align 8
ret i64* %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx14__alloc_traitsISaImEE10deallocateERS1_Pmm(%"class.std::allocator.1"* dereferenceable(1) %__a, i64* %__p, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.1"*, align 8
%__p.addr = alloca i64*, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
store i64* %__p, i64** %__p.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator.1"* %0 to %"class.__gnu_cxx::new_allocator.2"*
%2 = load i64*, i64** %__p.addr, align 8
%3 = load i64, i64* %__n.addr, align 8
call void @_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm(%"class.__gnu_cxx::new_allocator.2"* %1, i64* %2, i64 %3)
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm(%"class.__gnu_cxx::new_allocator.2"* %this, i64* %__p, i64 %0) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
%__p.addr = alloca i64*, align 8
%.addr = alloca i64, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
store i64* %__p, i64** %__p.addr, align 8
store i64 %0, i64* %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
%1 = load i64*, i64** %__p.addr, align 8
%2 = bitcast i64* %1 to i8*
call void @_ZdlPv(i8* %2) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm(%"struct.std::_Bvector_base"* %this, i64 %__n) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
%__n.addr = alloca i64, align 8
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl to %"class.std::allocator.1"*
%1 = load i64, i64* %__n.addr, align 8
%call = call i64 @_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm(i64 %1)
%call2 = call i64* @_ZN9__gnu_cxx14__alloc_traitsISaImEE8allocateERS1_m(%"class.std::allocator.1"* dereferenceable(1) %0, i64 %call)
ret i64* %call2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm(i64 %__n) #6 comdat align 2 {
entry:
%__n.addr = alloca i64, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load i64, i64* %__n.addr, align 8
%add = add i64 %0, 64
%sub = sub i64 %add, 1
%div = udiv i64 %sub, 64
ret i64 %div
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bit_iteratorC2EPmj(%"struct.std::_Bit_iterator"* %this, i64* %__x, i32 %__y) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
%__x.addr = alloca i64*, align 8
%__y.addr = alloca i32, align 4
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
store i64* %__x, i64** %__x.addr, align 8
store i32 %__y, i32* %__y.addr, align 4
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%1 = load i64*, i64** %__x.addr, align 8
%2 = load i32, i32* %__y.addr, align 4
call void @_ZNSt18_Bit_iterator_baseC2EPmj(%"struct.std::_Bit_iterator_base"* %0, i64* %1, i32 %2)
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNKSt13_Bit_iteratorplEl(%"struct.std::_Bit_iterator"* %this, i64 %__i) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
%__i.addr = alloca i64, align 8
%__tmp = alloca %"struct.std::_Bit_iterator", align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
store i64 %__i, i64* %__i.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__tmp to i8*
%1 = bitcast %"struct.std::_Bit_iterator"* %this1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 16, i1 false)
%2 = load i64, i64* %__i.addr, align 8
%call = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorpLEl(%"struct.std::_Bit_iterator"* %__tmp, i64 %2)
%3 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%4 = bitcast %"struct.std::_Bit_iterator"* %call to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false)
%5 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%6 = load { i64*, i32 }, { i64*, i32 }* %5, align 8
ret { i64*, i32 } %6
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZN9__gnu_cxx14__alloc_traitsISaImEE8allocateERS1_m(%"class.std::allocator.1"* dereferenceable(1) %__a, i64 %__n) #0 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.1"*, align 8
%__n.addr = alloca i64, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
%0 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator.1"* %0 to %"class.__gnu_cxx::new_allocator.2"*
%2 = load i64, i64* %__n.addr, align 8
%call = call i64* @_ZN9__gnu_cxx13new_allocatorImE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.2"* %1, i64 %2, i8* null)
ret i64* %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZN9__gnu_cxx13new_allocatorImE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.2"* %this, i64 %__n, i8* %0) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
%__n.addr = alloca i64, align 8
%.addr = alloca i8*, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store i8* %0, i8** %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
%1 = load i64, i64* %__n.addr, align 8
%call = call i64 @_ZNK9__gnu_cxx13new_allocatorImE8max_sizeEv(%"class.__gnu_cxx::new_allocator.2"* %this1) #3
%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() #19
unreachable
if.end: ; preds = %entry
%2 = load i64, i64* %__n.addr, align 8
%mul = mul i64 %2, 8
%call2 = call i8* @_Znwm(i64 %mul)
%3 = bitcast i8* %call2 to i64*
ret i64* %3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZNK9__gnu_cxx13new_allocatorImE8max_sizeEv(%"class.__gnu_cxx::new_allocator.2"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
ret i64 2305843009213693951
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorpLEl(%"struct.std::_Bit_iterator"* %this, i64 %__i) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
%__i.addr = alloca i64, align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
store i64 %__i, i64* %__i.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%1 = load i64, i64* %__i.addr, align 8
call void @_ZNSt18_Bit_iterator_base7_M_incrEl(%"struct.std::_Bit_iterator_base"* %0, i64 %1)
ret %"struct.std::_Bit_iterator"* %this1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt18_Bit_iterator_base7_M_incrEl(%"struct.std::_Bit_iterator_base"* %this, i64 %__i) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
%__i.addr = alloca i64, align 8
%__n = alloca i64, align 8
store %"struct.std::_Bit_iterator_base"* %this, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
store i64 %__i, i64* %__i.addr, align 8
%this1 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%0 = load i64, i64* %__i.addr, align 8
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
%1 = load i32, i32* %_M_offset, align 8
%conv = zext i32 %1 to i64
%add = add nsw i64 %0, %conv
store i64 %add, i64* %__n, align 8
%2 = load i64, i64* %__n, align 8
%div = sdiv i64 %2, 64
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 0
%3 = load i64*, i64** %_M_p, align 8
%add.ptr = getelementptr inbounds i64, i64* %3, i64 %div
store i64* %add.ptr, i64** %_M_p, align 8
%4 = load i64, i64* %__n, align 8
%rem = srem i64 %4, 64
store i64 %rem, i64* %__n, align 8
%5 = load i64, i64* %__n, align 8
%cmp = icmp slt i64 %5, 0
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%6 = load i64, i64* %__n, align 8
%add2 = add nsw i64 %6, 64
store i64 %add2, i64* %__n, align 8
%_M_p3 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 0
%7 = load i64*, i64** %_M_p3, align 8
%incdec.ptr = getelementptr inbounds i64, i64* %7, i32 -1
store i64* %incdec.ptr, i64** %_M_p3, align 8
br label %if.end
if.end: ; preds = %if.then, %entry
%8 = load i64, i64* %__n, align 8
%conv4 = trunc i64 %8 to i32
%_M_offset5 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
store i32 %conv4, i32* %_M_offset5, align 8
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZSt4copyIPmS0_ET0_T_S2_S1_(i64* %__first, i64* %__last, i64* %__result) #0 comdat {
entry:
%__first.addr = alloca i64*, align 8
%__last.addr = alloca i64*, align 8
%__result.addr = alloca i64*, align 8
store i64* %__first, i64** %__first.addr, align 8
store i64* %__last, i64** %__last.addr, align 8
store i64* %__result, i64** %__result.addr, align 8
%0 = load i64*, i64** %__first.addr, align 8
%call = call i64* @_ZSt12__miter_baseIPmET_S1_(i64* %0)
%1 = load i64*, i64** %__last.addr, align 8
%call1 = call i64* @_ZSt12__miter_baseIPmET_S1_(i64* %1)
%2 = load i64*, i64** %__result.addr, align 8
%call2 = call i64* @_ZSt14__copy_move_a2ILb0EPmS0_ET1_T0_S2_S1_(i64* %call, i64* %call1, i64* %2)
ret i64* %call2
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt4copyISt19_Bit_const_iteratorSt13_Bit_iteratorET0_T_S3_S2_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_const_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__miter_baseISt19_Bit_const_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_const_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__miter_baseISt19_Bit_const_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%40 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp2 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = load i64*, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = load i32, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%call6 = call { i64*, i32 } @_ZSt14__copy_move_a2ILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_(i64* %37, i32 %39, i64* %42, i32 %44, i64* %47, i32 %49)
%50 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = extractvalue { i64*, i32 } %call6, 0
store i64* %52, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = extractvalue { i64*, i32 } %call6, 1
store i32 %54, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%56 = load { i64*, i32 }, { i64*, i32 }* %55, align 8
ret { i64*, i32 } %56
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZSt14__copy_move_a2ILb0EPmS0_ET1_T0_S2_S1_(i64* %__first, i64* %__last, i64* %__result) #0 comdat {
entry:
%__first.addr = alloca i64*, align 8
%__last.addr = alloca i64*, align 8
%__result.addr = alloca i64*, align 8
store i64* %__first, i64** %__first.addr, align 8
store i64* %__last, i64** %__last.addr, align 8
store i64* %__result, i64** %__result.addr, align 8
%0 = load i64*, i64** %__first.addr, align 8
%call = call i64* @_ZSt12__niter_baseIPmET_S1_(i64* %0)
%1 = load i64*, i64** %__last.addr, align 8
%call1 = call i64* @_ZSt12__niter_baseIPmET_S1_(i64* %1)
%2 = load i64*, i64** %__result.addr, align 8
%call2 = call i64* @_ZSt12__niter_baseIPmET_S1_(i64* %2)
%call3 = call i64* @_ZSt13__copy_move_aILb0EPmS0_ET1_T0_S2_S1_(i64* %call, i64* %call1, i64* %call2)
ret i64* %call3
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64* @_ZSt12__miter_baseIPmET_S1_(i64* %__it) #6 comdat {
entry:
%__it.addr = alloca i64*, align 8
store i64* %__it, i64** %__it.addr, align 8
%0 = load i64*, i64** %__it.addr, align 8
ret i64* %0
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64* @_ZSt13__copy_move_aILb0EPmS0_ET1_T0_S2_S1_(i64* %__first, i64* %__last, i64* %__result) #0 comdat {
entry:
%__first.addr = alloca i64*, align 8
%__last.addr = alloca i64*, align 8
%__result.addr = alloca i64*, align 8
%__simple = alloca i8, align 1
store i64* %__first, i64** %__first.addr, align 8
store i64* %__last, i64** %__last.addr, align 8
store i64* %__result, i64** %__result.addr, align 8
store i8 1, i8* %__simple, align 1
%0 = load i64*, i64** %__first.addr, align 8
%1 = load i64*, i64** %__last.addr, align 8
%2 = load i64*, i64** %__result.addr, align 8
%call = call i64* @_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mImEEPT_PKS3_S6_S4_(i64* %0, i64* %1, i64* %2)
ret i64* %call
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64* @_ZSt12__niter_baseIPmET_S1_(i64* %__it) #6 comdat {
entry:
%__it.addr = alloca i64*, align 8
store i64* %__it, i64** %__it.addr, align 8
%0 = load i64*, i64** %__it.addr, align 8
ret i64* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64* @_ZNSt11__copy_moveILb0ELb1ESt26random_access_iterator_tagE8__copy_mImEEPT_PKS3_S6_S4_(i64* %__first, i64* %__last, i64* %__result) #6 comdat align 2 {
entry:
%__first.addr = alloca i64*, align 8
%__last.addr = alloca i64*, align 8
%__result.addr = alloca i64*, align 8
%_Num = alloca i64, align 8
store i64* %__first, i64** %__first.addr, align 8
store i64* %__last, i64** %__last.addr, align 8
store i64* %__result, i64** %__result.addr, align 8
%0 = load i64*, i64** %__last.addr, align 8
%1 = load i64*, i64** %__first.addr, align 8
%sub.ptr.lhs.cast = ptrtoint i64* %0 to i64
%sub.ptr.rhs.cast = ptrtoint i64* %1 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* %_Num, align 8
%2 = load i64, i64* %_Num, align 8
%tobool = icmp ne i64 %2, 0
br i1 %tobool, label %if.then, label %if.end
if.then: ; preds = %entry
%3 = load i64*, i64** %__result.addr, align 8
%4 = bitcast i64* %3 to i8*
%5 = load i64*, i64** %__first.addr, align 8
%6 = bitcast i64* %5 to i8*
%7 = load i64, i64* %_Num, align 8
%mul = mul i64 8, %7
call void @llvm.memmove.p0i8.p0i8.i64(i8* align 8 %4, i8* align 8 %6, i64 %mul, i1 false)
br label %if.end
if.end: ; preds = %if.then, %entry
%8 = load i64*, i64** %__result.addr, align 8
%9 = load i64, i64* %_Num, align 8
%add.ptr = getelementptr inbounds i64, i64* %8, i64 %9
ret i64* %add.ptr
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt14__copy_move_a2ILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp6 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_const_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__niter_baseISt19_Bit_const_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_const_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__niter_baseISt19_Bit_const_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%call7 = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %37, i32 %39)
%40 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = extractvalue { i64*, i32 } %call7, 0
store i64* %42, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = extractvalue { i64*, i32 } %call7, 1
store i32 %44, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%50 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp2 to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = load i64*, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = load i32, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%56 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 0
%57 = load i64*, i64** %56, align 8
%58 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 1
%59 = load i32, i32* %58, align 8
%call8 = call { i64*, i32 } @_ZSt13__copy_move_aILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_(i64* %47, i32 %49, i64* %52, i32 %54, i64* %57, i32 %59)
%60 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%61 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 0
%62 = extractvalue { i64*, i32 } %call8, 0
store i64* %62, i64** %61, align 8
%63 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 1
%64 = extractvalue { i64*, i32 } %call8, 1
store i32 %64, i32* %63, align 8
%65 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%66 = load { i64*, i32 }, { i64*, i32 }* %65, align 8
ret { i64*, i32 } %66
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt12__miter_baseISt19_Bit_const_iteratorET_S1_(i64* %__it.coerce0, i32 %__it.coerce1) #6 comdat {
entry:
%retval = alloca %"struct.std::_Bit_const_iterator", align 8
%__it = alloca %"struct.std::_Bit_const_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__it to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__it.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__it.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %retval to i8*
%4 = bitcast %"struct.std::_Bit_const_iterator"* %__it to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false)
%5 = bitcast %"struct.std::_Bit_const_iterator"* %retval to { i64*, i32 }*
%6 = load { i64*, i32 }, { i64*, i32 }* %5, align 8
ret { i64*, i32 } %6
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt13__copy_move_aILb0ESt19_Bit_const_iteratorSt13_Bit_iteratorET1_T0_S3_S2_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__simple = alloca i8, align 1
%agg.tmp = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
store i8 0, i8* %__simple, align 1
%9 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to i8*
%10 = bitcast %"struct.std::_Bit_const_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to i8*
%12 = bitcast %"struct.std::_Bit_const_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %11, i8* align 8 %12, i64 16, i1 false)
%13 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to i8*
%14 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 16, i1 false)
%15 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp to { i64*, i32 }*
%16 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 0
%17 = load i64*, i64** %16, align 8
%18 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 1
%19 = load i32, i32* %18, align 8
%20 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp1 to { i64*, i32 }*
%21 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 0
%22 = load i64*, i64** %21, align 8
%23 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 0
%27 = load i64*, i64** %26, align 8
%28 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 1
%29 = load i32, i32* %28, align 8
%call = call { i64*, i32 } @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt19_Bit_const_iteratorSt13_Bit_iteratorEET0_T_S6_S5_(i64* %17, i32 %19, i64* %22, i32 %24, i64* %27, i32 %29)
%30 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 0
%32 = extractvalue { i64*, i32 } %call, 0
store i64* %32, i64** %31, align 8
%33 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 1
%34 = extractvalue { i64*, i32 } %call, 1
store i32 %34, i32* %33, align 8
%35 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%36 = load { i64*, i32 }, { i64*, i32 }* %35, align 8
ret { i64*, i32 } %36
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt12__niter_baseISt19_Bit_const_iteratorET_S1_(i64* %__it.coerce0, i32 %__it.coerce1) #6 comdat {
entry:
%retval = alloca %"struct.std::_Bit_const_iterator", align 8
%__it = alloca %"struct.std::_Bit_const_iterator", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__it to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__it.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__it.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %retval to i8*
%4 = bitcast %"struct.std::_Bit_const_iterator"* %__it to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false)
%5 = bitcast %"struct.std::_Bit_const_iterator"* %retval to { i64*, i32 }*
%6 = load { i64*, i32 }, { i64*, i32 }* %5, align 8
ret { i64*, i32 } %6
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %__it.coerce0, i32 %__it.coerce1) #6 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__it = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__it to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__it.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__it.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%4 = bitcast %"struct.std::_Bit_iterator"* %__it to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false)
%5 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%6 = load { i64*, i32 }, { i64*, i32 }* %5, align 8
ret { i64*, i32 } %6
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt19_Bit_const_iteratorSt13_Bit_iteratorEET0_T_S6_S5_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_const_iterator", align 8
%__last = alloca %"struct.std::_Bit_const_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__n = alloca i64, align 8
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_const_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_const_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%10 = bitcast %"struct.std::_Bit_const_iterator"* %__first to %"struct.std::_Bit_iterator_base"*
%call = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %9, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %10)
store i64 %call, i64* %__n, align 8
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%11 = load i64, i64* %__n, align 8
%cmp = icmp sgt i64 %11, 0
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%call1 = call zeroext i1 @_ZNKSt19_Bit_const_iteratordeEv(%"struct.std::_Bit_const_iterator"* %__first)
%call2 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %__result)
%12 = bitcast %"struct.std::_Bit_reference"* %ref.tmp to { i64*, i64 }*
%13 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 0
%14 = extractvalue { i64*, i64 } %call2, 0
store i64* %14, i64** %13, align 8
%15 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 1
%16 = extractvalue { i64*, i64 } %call2, 1
store i64 %16, i64* %15, align 8
%call3 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %ref.tmp, i1 zeroext %call1)
%call4 = call dereferenceable(16) %"struct.std::_Bit_const_iterator"* @_ZNSt19_Bit_const_iteratorppEv(%"struct.std::_Bit_const_iterator"* %__first)
%call5 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorppEv(%"struct.std::_Bit_iterator"* %__result)
br label %for.inc
for.inc: ; preds = %for.body
%17 = load i64, i64* %__n, align 8
%dec = add nsw i64 %17, -1
store i64 %dec, i64* %__n, align 8
br label %for.cond
for.end: ; preds = %for.cond
%18 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%19 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %18, i8* align 8 %19, i64 16, i1 false)
%20 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%21 = load { i64*, i32 }, { i64*, i32 }* %20, align 8
ret { i64*, i32 } %21
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %this) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_reference", align 8
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %0, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%2 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %2, i32 0, i32 1
%3 = load i32, i32* %_M_offset, align 8
%sh_prom = zext i32 %3 to i64
%shl = shl i64 1, %sh_prom
call void @_ZNSt14_Bit_referenceC2EPmm(%"struct.std::_Bit_reference"* %retval, i64* %1, i64 %shl)
%4 = bitcast %"struct.std::_Bit_reference"* %retval to { i64*, i64 }*
%5 = load { i64*, i64 }, { i64*, i64 }* %4, align 8
ret { i64*, i64 } %5
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %this, i1 zeroext %__x) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_reference"*, align 8
%__x.addr = alloca i8, align 1
store %"struct.std::_Bit_reference"* %this, %"struct.std::_Bit_reference"** %this.addr, align 8
%frombool = zext i1 %__x to i8
store i8 %frombool, i8* %__x.addr, align 1
%this1 = load %"struct.std::_Bit_reference"*, %"struct.std::_Bit_reference"** %this.addr, align 8
%0 = load i8, i8* %__x.addr, align 1
%tobool = trunc i8 %0 to i1
br i1 %tobool, label %if.then, label %if.else
if.then: ; preds = %entry
%_M_mask = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 1
%1 = load i64, i64* %_M_mask, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 0
%2 = load i64*, i64** %_M_p, align 8
%3 = load i64, i64* %2, align 8
%or = or i64 %3, %1
store i64 %or, i64* %2, align 8
br label %if.end
if.else: ; preds = %entry
%_M_mask2 = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 1
%4 = load i64, i64* %_M_mask2, align 8
%neg = xor i64 %4, -1
%_M_p3 = getelementptr inbounds %"struct.std::_Bit_reference", %"struct.std::_Bit_reference"* %this1, i32 0, i32 0
%5 = load i64*, i64** %_M_p3, align 8
%6 = load i64, i64* %5, align 8
%and = and i64 %6, %neg
store i64 %and, i64* %5, align 8
br label %if.end
if.end: ; preds = %if.else, %if.then
ret %"struct.std::_Bit_reference"* %this1
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_const_iterator"* @_ZNSt19_Bit_const_iteratorppEv(%"struct.std::_Bit_const_iterator"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_const_iterator"*, align 8
store %"struct.std::_Bit_const_iterator"* %this, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_const_iterator"*, %"struct.std::_Bit_const_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_const_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
call void @_ZNSt18_Bit_iterator_base10_M_bump_upEv(%"struct.std::_Bit_iterator_base"* %0)
ret %"struct.std::_Bit_const_iterator"* %this1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorppEv(%"struct.std::_Bit_iterator"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
call void @_ZNSt18_Bit_iterator_base10_M_bump_upEv(%"struct.std::_Bit_iterator_base"* %0)
ret %"struct.std::_Bit_iterator"* %this1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt18_Bit_iterator_base10_M_bump_upEv(%"struct.std::_Bit_iterator_base"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
store %"struct.std::_Bit_iterator_base"* %this, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
%0 = load i32, i32* %_M_offset, align 8
%inc = add i32 %0, 1
store i32 %inc, i32* %_M_offset, align 8
%cmp = icmp eq i32 %0, 63
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%_M_offset2 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
store i32 0, i32* %_M_offset2, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%incdec.ptr = getelementptr inbounds i64, i64* %1, i32 1
store i64* %incdec.ptr, i64** %_M_p, align 8
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator.1"* @_ZN9__gnu_cxx14__alloc_traitsISaImEE17_S_select_on_copyERKS1_(%"class.std::allocator.1"* dereferenceable(1) %__a) #6 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
%0 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
ret %"class.std::allocator.1"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(1) %"class.std::allocator.1"* @_ZNKSt13_Bvector_baseISaIbEE20_M_get_Bit_allocatorEv(%"struct.std::_Bvector_base"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%0 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl to %"class.std::allocator.1"*
ret %"class.std::allocator.1"* %0
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaIbEC2ImEERKSaIT_E(%"class.std::allocator.13"* %this, %"class.std::allocator.1"* dereferenceable(1) %0) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.13"*, align 8
%.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.13"* %this, %"class.std::allocator.13"** %this.addr, align 8
store %"class.std::allocator.1"* %0, %"class.std::allocator.1"** %.addr, align 8
%this1 = load %"class.std::allocator.13"*, %"class.std::allocator.13"** %this.addr, align 8
%1 = bitcast %"class.std::allocator.13"* %this1 to %"class.__gnu_cxx::new_allocator.14"*
call void @_ZN9__gnu_cxx13new_allocatorIbEC2Ev(%"class.__gnu_cxx::new_allocator.14"* %1) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEEC2ERKS0_(%"struct.std::_Bvector_base"* %this, %"class.std::allocator.13"* dereferenceable(1) %__a) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
%__a.addr = alloca %"class.std::allocator.13"*, align 8
%ref.tmp = alloca %"class.std::allocator.1", align 1
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
store %"class.std::allocator.13"* %__a, %"class.std::allocator.13"** %__a.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
%0 = load %"class.std::allocator.13"*, %"class.std::allocator.13"** %__a.addr, align 8
call void @_ZNSaImEC2IbEERKSaIT_E(%"class.std::allocator.1"* %ref.tmp, %"class.std::allocator.13"* dereferenceable(1) %0) #3
invoke void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2ERKSaImE(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, %"class.std::allocator.1"* dereferenceable(1) %ref.tmp)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
call void @_ZNSaImED2Ev(%"class.std::allocator.1"* %ref.tmp) #3
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 @_ZNSaImED2Ev(%"class.std::allocator.1"* %ref.tmp) #3
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaIbED2Ev(%"class.std::allocator.13"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.13"*, align 8
store %"class.std::allocator.13"* %this, %"class.std::allocator.13"** %this.addr, align 8
%this1 = load %"class.std::allocator.13"*, %"class.std::allocator.13"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.13"* %this1 to %"class.__gnu_cxx::new_allocator.14"*
call void @_ZN9__gnu_cxx13new_allocatorIbED2Ev(%"class.__gnu_cxx::new_allocator.14"* %0) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEED2Ev(%"struct.std::_Bvector_base"* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Bvector_base"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Bvector_base"* %this, %"struct.std::_Bvector_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base"*, %"struct.std::_Bvector_base"** %this.addr, align 8
invoke void @_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv(%"struct.std::_Bvector_base"* %this1)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
call void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implD2Ev(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl) #3
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
%_M_impl2 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %this1, i32 0, i32 0
call void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implD2Ev(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl2) #3
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIbEC2Ev(%"class.__gnu_cxx::new_allocator.14"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.14"*, align 8
store %"class.__gnu_cxx::new_allocator.14"* %this, %"class.__gnu_cxx::new_allocator.14"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.14"*, %"class.__gnu_cxx::new_allocator.14"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaImEC2IbEERKSaIT_E(%"class.std::allocator.1"* %this, %"class.std::allocator.13"* dereferenceable(1) %0) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.1"*, align 8
%.addr = alloca %"class.std::allocator.13"*, align 8
store %"class.std::allocator.1"* %this, %"class.std::allocator.1"** %this.addr, align 8
store %"class.std::allocator.13"* %0, %"class.std::allocator.13"** %.addr, align 8
%this1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %this.addr, align 8
%1 = bitcast %"class.std::allocator.1"* %this1 to %"class.__gnu_cxx::new_allocator.2"*
call void @_ZN9__gnu_cxx13new_allocatorImEC2Ev(%"class.__gnu_cxx::new_allocator.2"* %1) #3
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implC2ERKSaImE(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this, %"class.std::allocator.1"* dereferenceable(1) %__a) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
%this.addr = alloca %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, align 8
%__a.addr = alloca %"class.std::allocator.1"*, align 8
%exn.slot = alloca i8*
%ehselector.slot = alloca i32
store %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
%this1 = load %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1 to %"class.std::allocator.1"*
%1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
call void @_ZNSaImEC2ERKS_(%"class.std::allocator.1"* %0, %"class.std::allocator.1"* dereferenceable(1) %1) #3
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 0
invoke void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %_M_start)
to label %invoke.cont unwind label %lpad
invoke.cont: ; preds = %entry
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 1
invoke void @_ZNSt13_Bit_iteratorC2Ev(%"struct.std::_Bit_iterator"* %_M_finish)
to label %invoke.cont2 unwind label %lpad
invoke.cont2: ; preds = %invoke.cont
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1, i32 0, i32 2
store i64* null, i64** %_M_end_of_storage, align 8
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
%5 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1 to %"class.std::allocator.1"*
call void @_ZNSaImED2Ev(%"class.std::allocator.1"* %5) #3
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: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaImED2Ev(%"class.std::allocator.1"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.1"* %this, %"class.std::allocator.1"** %this.addr, align 8
%this1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.1"* %this1 to %"class.__gnu_cxx::new_allocator.2"*
call void @_ZN9__gnu_cxx13new_allocatorImED2Ev(%"class.__gnu_cxx::new_allocator.2"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSaImEC2ERKS_(%"class.std::allocator.1"* %this, %"class.std::allocator.1"* dereferenceable(1) %__a) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.std::allocator.1"*, align 8
%__a.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.1"* %this, %"class.std::allocator.1"** %this.addr, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
%this1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %this.addr, align 8
%0 = bitcast %"class.std::allocator.1"* %this1 to %"class.__gnu_cxx::new_allocator.2"*
%1 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
%2 = bitcast %"class.std::allocator.1"* %1 to %"class.__gnu_cxx::new_allocator.2"*
call void @_ZN9__gnu_cxx13new_allocatorImEC2ERKS1_(%"class.__gnu_cxx::new_allocator.2"* %0, %"class.__gnu_cxx::new_allocator.2"* dereferenceable(1) %2) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorImEC2ERKS1_(%"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"* dereferenceable(1) %0) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
%.addr = alloca %"class.__gnu_cxx::new_allocator.2"*, align 8
store %"class.__gnu_cxx::new_allocator.2"* %this, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
store %"class.__gnu_cxx::new_allocator.2"* %0, %"class.__gnu_cxx::new_allocator.2"** %.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.2"*, %"class.__gnu_cxx::new_allocator.2"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZN9__gnu_cxx13new_allocatorIbED2Ev(%"class.__gnu_cxx::new_allocator.14"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"class.__gnu_cxx::new_allocator.14"*, align 8
store %"class.__gnu_cxx::new_allocator.14"* %this, %"class.__gnu_cxx::new_allocator.14"** %this.addr, align 8
%this1 = load %"class.__gnu_cxx::new_allocator.14"*, %"class.__gnu_cxx::new_allocator.14"** %this.addr, align 8
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt13_Bvector_baseISaIbEE13_Bvector_implD2Ev(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this) unnamed_addr #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, align 8
store %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%this1 = load %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"*, %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %this1 to %"class.std::allocator.1"*
call void @_ZNSaImED2Ev(%"class.std::allocator.1"* %0) #3
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt13_Bit_iteratorppEi(%"struct.std::_Bit_iterator"* %this, i32 %0) #6 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
%.addr = alloca i32, align 4
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
store i32 %0, i32* %.addr, align 4
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%1 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%2 = bitcast %"struct.std::_Bit_iterator"* %this1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %1, i8* align 8 %2, i64 16, i1 false)
%3 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
call void @_ZNSt18_Bit_iterator_base10_M_bump_upEv(%"struct.std::_Bit_iterator_base"* %3)
%4 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%5 = load { i64*, i32 }, { i64*, i32 }* %4, align 8
ret { i64*, i32 } %5
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local void @_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb(%"class.std::vector.0"* %this, i64* %__position.coerce0, i32 %__position.coerce1, i1 zeroext %__x) #0 comdat align 2 {
entry:
%__position = alloca %"struct.std::_Bit_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
%__x.addr = alloca i8, align 1
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp6 = alloca %"struct.std::_Bit_iterator", align 8
%coerce = alloca %"struct.std::_Bit_iterator", align 8
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
%__len = alloca i64, align 8
%__q = alloca i64*, align 8
%__start = alloca %"struct.std::_Bit_iterator", align 8
%__i = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp19 = alloca %"struct.std::_Bit_const_iterator", align 8
%ref.tmp20 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp22 = alloca %"struct.std::_Bit_const_iterator", align 8
%agg.tmp23 = alloca %"struct.std::_Bit_iterator", align 8
%ref.tmp26 = alloca %"struct.std::_Bit_reference", align 8
%ref.tmp27 = alloca %"struct.std::_Bit_iterator", align 8
%__finish = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp31 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp32 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp34 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__position to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__position.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__position.coerce1, i32* %2, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%frombool = zext i1 %__x to i8
store i8 %frombool, i8* %__x.addr, align 1
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%3 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %3, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 1
%4 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to %"struct.std::_Bit_iterator_base"*
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %4, i32 0, i32 0
%5 = load i64*, i64** %_M_p, align 8
%6 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl2 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %6, i32 0, i32 0
%call = call i64* @_ZNKSt13_Bvector_baseISaIbEE13_Bvector_impl11_M_end_addrEv(%"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl2)
%cmp = icmp ne i64* %5, %call
br i1 %cmp, label %if.then, label %if.else
if.then: ; preds = %entry
%7 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to i8*
%8 = bitcast %"struct.std::_Bit_iterator"* %__position to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %7, i8* align 8 %8, i64 16, i1 false)
%9 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl4 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %9, i32 0, i32 0
%_M_finish5 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl4, i32 0, i32 1
%10 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to i8*
%11 = bitcast %"struct.std::_Bit_iterator"* %_M_finish5 to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %10, i8* align 8 %11, i64 16, i1 false)
%12 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl7 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %12, i32 0, i32 0
%_M_finish8 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl7, i32 0, i32 1
%call9 = call { i64*, i32 } @_ZNKSt13_Bit_iteratorplEl(%"struct.std::_Bit_iterator"* %_M_finish8, i64 1)
%13 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %13, i32 0, i32 0
%15 = extractvalue { i64*, i32 } %call9, 0
store i64* %15, i64** %14, align 8
%16 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %13, i32 0, i32 1
%17 = extractvalue { i64*, i32 } %call9, 1
store i32 %17, i32* %16, align 8
%18 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %18, i32 0, i32 0
%20 = load i64*, i64** %19, align 8
%21 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %18, i32 0, i32 1
%22 = load i32, i32* %21, align 8
%23 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%28 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = load i64*, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = load i32, i32* %31, align 8
%call10 = call { i64*, i32 } @_ZSt13copy_backwardISt13_Bit_iteratorS0_ET0_T_S2_S1_(i64* %20, i32 %22, i64* %25, i32 %27, i64* %30, i32 %32)
%33 = bitcast %"struct.std::_Bit_iterator"* %coerce to { i64*, i32 }*
%34 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %33, i32 0, i32 0
%35 = extractvalue { i64*, i32 } %call10, 0
store i64* %35, i64** %34, align 8
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %33, i32 0, i32 1
%37 = extractvalue { i64*, i32 } %call10, 1
store i32 %37, i32* %36, align 8
%38 = load i8, i8* %__x.addr, align 1
%tobool = trunc i8 %38 to i1
%call11 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %__position)
%39 = bitcast %"struct.std::_Bit_reference"* %ref.tmp to { i64*, i64 }*
%40 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %39, i32 0, i32 0
%41 = extractvalue { i64*, i64 } %call11, 0
store i64* %41, i64** %40, align 8
%42 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %39, i32 0, i32 1
%43 = extractvalue { i64*, i64 } %call11, 1
store i64 %43, i64* %42, align 8
%call12 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %ref.tmp, i1 zeroext %tobool)
%44 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl13 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %44, i32 0, i32 0
%_M_finish14 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl13, i32 0, i32 1
%call15 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorppEv(%"struct.std::_Bit_iterator"* %_M_finish14)
br label %if.end
if.else: ; preds = %entry
%call16 = call i64 @_ZNKSt6vectorIbSaIbEE12_M_check_lenEmPKc(%"class.std::vector.0"* %this1, i64 1, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.27, i64 0, i64 0))
store i64 %call16, i64* %__len, align 8
%45 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%46 = load i64, i64* %__len, align 8
%call17 = call i64* @_ZNSt13_Bvector_baseISaIbEE11_M_allocateEm(%"struct.std::_Bvector_base"* %45, i64 %46)
store i64* %call17, i64** %__q, align 8
%47 = load i64*, i64** %__q, align 8
%call18 = call i64* @_ZSt11__addressofImEPT_RS0_(i64* dereferenceable(8) %47)
call void @_ZNSt13_Bit_iteratorC2EPmj(%"struct.std::_Bit_iterator"* %__start, i64* %call18, i32 0)
%call21 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE5beginEv(%"class.std::vector.0"* %this1)
%48 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp20 to { i64*, i32 }*
%49 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %48, i32 0, i32 0
%50 = extractvalue { i64*, i32 } %call21, 0
store i64* %50, i64** %49, align 8
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %48, i32 0, i32 1
%52 = extractvalue { i64*, i32 } %call21, 1
store i32 %52, i32* %51, align 8
call void @_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator(%"struct.std::_Bit_const_iterator"* %agg.tmp19, %"struct.std::_Bit_iterator"* dereferenceable(16) %ref.tmp20)
call void @_ZNSt19_Bit_const_iteratorC2ERKSt13_Bit_iterator(%"struct.std::_Bit_const_iterator"* %agg.tmp22, %"struct.std::_Bit_iterator"* dereferenceable(16) %__position)
%53 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp23 to i8*
%54 = bitcast %"struct.std::_Bit_iterator"* %__start to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %53, i8* align 8 %54, i64 16, i1 false)
%55 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp19 to { i64*, i32 }*
%56 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 0
%57 = load i64*, i64** %56, align 8
%58 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 1
%59 = load i32, i32* %58, align 8
%60 = bitcast %"struct.std::_Bit_const_iterator"* %agg.tmp22 to { i64*, i32 }*
%61 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 0
%62 = load i64*, i64** %61, align 8
%63 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 1
%64 = load i32, i32* %63, align 8
%call24 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE15_M_copy_alignedESt19_Bit_const_iteratorS2_St13_Bit_iterator(%"class.std::vector.0"* %this1, i64* %57, i32 %59, i64* %62, i32 %64, %"struct.std::_Bit_iterator"* byval(%"struct.std::_Bit_iterator") align 8 %agg.tmp23)
%65 = bitcast %"struct.std::_Bit_iterator"* %__i to { i64*, i32 }*
%66 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %65, i32 0, i32 0
%67 = extractvalue { i64*, i32 } %call24, 0
store i64* %67, i64** %66, align 8
%68 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %65, i32 0, i32 1
%69 = extractvalue { i64*, i32 } %call24, 1
store i32 %69, i32* %68, align 8
%70 = load i8, i8* %__x.addr, align 1
%tobool25 = trunc i8 %70 to i1
%call28 = call { i64*, i32 } @_ZNSt13_Bit_iteratorppEi(%"struct.std::_Bit_iterator"* %__i, i32 0)
%71 = bitcast %"struct.std::_Bit_iterator"* %ref.tmp27 to { i64*, i32 }*
%72 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %71, i32 0, i32 0
%73 = extractvalue { i64*, i32 } %call28, 0
store i64* %73, i64** %72, align 8
%74 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %71, i32 0, i32 1
%75 = extractvalue { i64*, i32 } %call28, 1
store i32 %75, i32* %74, align 8
%call29 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %ref.tmp27)
%76 = bitcast %"struct.std::_Bit_reference"* %ref.tmp26 to { i64*, i64 }*
%77 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %76, i32 0, i32 0
%78 = extractvalue { i64*, i64 } %call29, 0
store i64* %78, i64** %77, align 8
%79 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %76, i32 0, i32 1
%80 = extractvalue { i64*, i64 } %call29, 1
store i64 %80, i64* %79, align 8
%call30 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %ref.tmp26, i1 zeroext %tobool25)
%81 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp31 to i8*
%82 = bitcast %"struct.std::_Bit_iterator"* %__position to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %81, i8* align 8 %82, i64 16, i1 false)
%call33 = call { i64*, i32 } @_ZNSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %this1)
%83 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp32 to { i64*, i32 }*
%84 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %83, i32 0, i32 0
%85 = extractvalue { i64*, i32 } %call33, 0
store i64* %85, i64** %84, align 8
%86 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %83, i32 0, i32 1
%87 = extractvalue { i64*, i32 } %call33, 1
store i32 %87, i32* %86, align 8
%88 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp34 to i8*
%89 = bitcast %"struct.std::_Bit_iterator"* %__i to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %88, i8* align 8 %89, i64 16, i1 false)
%90 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp31 to { i64*, i32 }*
%91 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %90, i32 0, i32 0
%92 = load i64*, i64** %91, align 8
%93 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %90, i32 0, i32 1
%94 = load i32, i32* %93, align 8
%95 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp32 to { i64*, i32 }*
%96 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %95, i32 0, i32 0
%97 = load i64*, i64** %96, align 8
%98 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %95, i32 0, i32 1
%99 = load i32, i32* %98, align 8
%100 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp34 to { i64*, i32 }*
%101 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %100, i32 0, i32 0
%102 = load i64*, i64** %101, align 8
%103 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %100, i32 0, i32 1
%104 = load i32, i32* %103, align 8
%call35 = call { i64*, i32 } @_ZSt4copyISt13_Bit_iteratorS0_ET0_T_S2_S1_(i64* %92, i32 %94, i64* %97, i32 %99, i64* %102, i32 %104)
%105 = bitcast %"struct.std::_Bit_iterator"* %__finish to { i64*, i32 }*
%106 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %105, i32 0, i32 0
%107 = extractvalue { i64*, i32 } %call35, 0
store i64* %107, i64** %106, align 8
%108 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %105, i32 0, i32 1
%109 = extractvalue { i64*, i32 } %call35, 1
store i32 %109, i32* %108, align 8
%110 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
call void @_ZNSt13_Bvector_baseISaIbEE13_M_deallocateEv(%"struct.std::_Bvector_base"* %110)
%111 = load i64*, i64** %__q, align 8
%112 = load i64, i64* %__len, align 8
%call36 = call i64 @_ZNSt13_Bvector_baseISaIbEE8_S_nwordEm(i64 %112)
%add.ptr = getelementptr inbounds i64, i64* %111, i64 %call36
%113 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl37 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %113, i32 0, i32 0
%_M_end_of_storage = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl37, i32 0, i32 2
store i64* %add.ptr, i64** %_M_end_of_storage, align 8
%114 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl38 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %114, i32 0, i32 0
%_M_start = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl38, i32 0, i32 0
%115 = bitcast %"struct.std::_Bit_iterator"* %_M_start to i8*
%116 = bitcast %"struct.std::_Bit_iterator"* %__start to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %115, i8* align 8 %116, i64 12, i1 false)
%117 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl39 = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %117, i32 0, i32 0
%_M_finish40 = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl39, i32 0, i32 1
%118 = bitcast %"struct.std::_Bit_iterator"* %_M_finish40 to i8*
%119 = bitcast %"struct.std::_Bit_iterator"* %__finish to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %118, i8* align 8 %119, i64 12, i1 false)
br label %if.end
if.end: ; preds = %if.else, %if.then
ret void
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt6vectorIbSaIbEE3endEv(%"class.std::vector.0"* %this) #6 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%this.addr = alloca %"class.std::vector.0"*, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%_M_impl = getelementptr inbounds %"struct.std::_Bvector_base", %"struct.std::_Bvector_base"* %0, i32 0, i32 0
%_M_finish = getelementptr inbounds %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl", %"struct.std::_Bvector_base<std::allocator<bool> >::_Bvector_impl"* %_M_impl, i32 0, i32 1
%1 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%2 = bitcast %"struct.std::_Bit_iterator"* %_M_finish to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %1, i8* align 8 %2, i64 16, i1 false)
%3 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%4 = load { i64*, i32 }, { i64*, i32 }* %3, align 8
ret { i64*, i32 } %4
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt13copy_backwardISt13_Bit_iteratorS0_ET0_T_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__miter_baseISt13_Bit_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__miter_baseISt13_Bit_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%40 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = load i64*, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = load i32, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%call6 = call { i64*, i32 } @_ZSt23__copy_move_backward_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %37, i32 %39, i64* %42, i32 %44, i64* %47, i32 %49)
%50 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = extractvalue { i64*, i32 } %call6, 0
store i64* %52, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = extractvalue { i64*, i32 } %call6, 1
store i32 %54, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%56 = load { i64*, i32 }, { i64*, i32 }* %55, align 8
ret { i64*, i32 } %56
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIbSaIbEE12_M_check_lenEmPKc(%"class.std::vector.0"* %this, i64 %__n, i8* %__s) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__n.addr = alloca i64, align 8
%__s.addr = alloca i8*, align 8
%__len = alloca i64, align 8
%ref.tmp = alloca i64, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
store i64 %__n, i64* %__n.addr, align 8
store i8* %__s, i8** %__s.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
%call = call i64 @_ZNKSt6vectorIbSaIbEE8max_sizeEv(%"class.std::vector.0"* %this1)
%call2 = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %this1)
%sub = sub i64 %call, %call2
%0 = load i64, i64* %__n.addr, align 8
%cmp = icmp ult i64 %sub, %0
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%1 = load i8*, i8** %__s.addr, align 8
call void @_ZSt20__throw_length_errorPKc(i8* %1) #19
unreachable
if.end: ; preds = %entry
%call3 = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %this1)
%call4 = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %this1)
store i64 %call4, i64* %ref.tmp, align 8
%call5 = call dereferenceable(8) i64* @_ZSt3maxImERKT_S2_S2_(i64* dereferenceable(8) %ref.tmp, i64* dereferenceable(8) %__n.addr)
%2 = load i64, i64* %call5, align 8
%add = add i64 %call3, %2
store i64 %add, i64* %__len, align 8
%3 = load i64, i64* %__len, align 8
%call6 = call i64 @_ZNKSt6vectorIbSaIbEE4sizeEv(%"class.std::vector.0"* %this1)
%cmp7 = icmp ult i64 %3, %call6
br i1 %cmp7, label %cond.true, label %lor.lhs.false
lor.lhs.false: ; preds = %if.end
%4 = load i64, i64* %__len, align 8
%call8 = call i64 @_ZNKSt6vectorIbSaIbEE8max_sizeEv(%"class.std::vector.0"* %this1)
%cmp9 = icmp ugt i64 %4, %call8
br i1 %cmp9, label %cond.true, label %cond.false
cond.true: ; preds = %lor.lhs.false, %if.end
%call10 = call i64 @_ZNKSt6vectorIbSaIbEE8max_sizeEv(%"class.std::vector.0"* %this1)
br label %cond.end
cond.false: ; preds = %lor.lhs.false
%5 = load i64, i64* %__len, align 8
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i64 [ %call10, %cond.true ], [ %5, %cond.false ]
ret i64 %cond
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt4copyISt13_Bit_iteratorS0_ET0_T_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__miter_baseISt13_Bit_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__miter_baseISt13_Bit_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%40 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = load i64*, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = load i32, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%call6 = call { i64*, i32 } @_ZSt14__copy_move_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %37, i32 %39, i64* %42, i32 %44, i64* %47, i32 %49)
%50 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = extractvalue { i64*, i32 } %call6, 0
store i64* %52, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = extractvalue { i64*, i32 } %call6, 1
store i32 %54, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%56 = load { i64*, i32 }, { i64*, i32 }* %55, align 8
ret { i64*, i32 } %56
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt23__copy_move_backward_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp6 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%call7 = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %37, i32 %39)
%40 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = extractvalue { i64*, i32 } %call7, 0
store i64* %42, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = extractvalue { i64*, i32 } %call7, 1
store i32 %44, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%50 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = load i64*, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = load i32, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%56 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 0
%57 = load i64*, i64** %56, align 8
%58 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 1
%59 = load i32, i32* %58, align 8
%call8 = call { i64*, i32 } @_ZSt22__copy_move_backward_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %47, i32 %49, i64* %52, i32 %54, i64* %57, i32 %59)
%60 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%61 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 0
%62 = extractvalue { i64*, i32 } %call8, 0
store i64* %62, i64** %61, align 8
%63 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 1
%64 = extractvalue { i64*, i32 } %call8, 1
store i32 %64, i32* %63, align 8
%65 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%66 = load { i64*, i32 }, { i64*, i32 }* %65, align 8
ret { i64*, i32 } %66
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt12__miter_baseISt13_Bit_iteratorET_S1_(i64* %__it.coerce0, i32 %__it.coerce1) #6 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__it = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__it to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__it.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__it.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%4 = bitcast %"struct.std::_Bit_iterator"* %__it to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false)
%5 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%6 = load { i64*, i32 }, { i64*, i32 }* %5, align 8
ret { i64*, i32 } %6
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt22__copy_move_backward_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__simple = alloca i8, align 1
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
store i8 0, i8* %__simple, align 1
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%12 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %11, i8* align 8 %12, i64 16, i1 false)
%13 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to i8*
%14 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 16, i1 false)
%15 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%16 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 0
%17 = load i64*, i64** %16, align 8
%18 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 1
%19 = load i32, i32* %18, align 8
%20 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%21 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 0
%22 = load i64*, i64** %21, align 8
%23 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 0
%27 = load i64*, i64** %26, align 8
%28 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 1
%29 = load i32, i32* %28, align 8
%call = call { i64*, i32 } @_ZNSt20__copy_move_backwardILb0ELb0ESt26random_access_iterator_tagE13__copy_move_bISt13_Bit_iteratorS3_EET0_T_S5_S4_(i64* %17, i32 %19, i64* %22, i32 %24, i64* %27, i32 %29)
%30 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 0
%32 = extractvalue { i64*, i32 } %call, 0
store i64* %32, i64** %31, align 8
%33 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 1
%34 = extractvalue { i64*, i32 } %call, 1
store i32 %34, i32* %33, align 8
%35 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%36 = load { i64*, i32 }, { i64*, i32 }* %35, align 8
ret { i64*, i32 } %36
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt20__copy_move_backwardILb0ELb0ESt26random_access_iterator_tagE13__copy_move_bISt13_Bit_iteratorS3_EET0_T_S5_S4_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__n = alloca i64, align 8
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
%ref.tmp3 = alloca %"struct.std::_Bit_reference", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to %"struct.std::_Bit_iterator_base"*
%call = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %9, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %10)
store i64 %call, i64* %__n, align 8
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%11 = load i64, i64* %__n, align 8
%cmp = icmp sgt i64 %11, 0
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%call1 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratormmEv(%"struct.std::_Bit_iterator"* %__last)
%call2 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %call1)
%12 = bitcast %"struct.std::_Bit_reference"* %ref.tmp to { i64*, i64 }*
%13 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 0
%14 = extractvalue { i64*, i64 } %call2, 0
store i64* %14, i64** %13, align 8
%15 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 1
%16 = extractvalue { i64*, i64 } %call2, 1
store i64 %16, i64* %15, align 8
%call4 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratormmEv(%"struct.std::_Bit_iterator"* %__result)
%call5 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %call4)
%17 = bitcast %"struct.std::_Bit_reference"* %ref.tmp3 to { i64*, i64 }*
%18 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %17, i32 0, i32 0
%19 = extractvalue { i64*, i64 } %call5, 0
store i64* %19, i64** %18, align 8
%20 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %17, i32 0, i32 1
%21 = extractvalue { i64*, i64 } %call5, 1
store i64 %21, i64* %20, align 8
%call6 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSERKS_(%"struct.std::_Bit_reference"* %ref.tmp3, %"struct.std::_Bit_reference"* dereferenceable(16) %ref.tmp)
br label %for.inc
for.inc: ; preds = %for.body
%22 = load i64, i64* %__n, align 8
%dec = add nsw i64 %22, -1
store i64 %dec, i64* %__n, align 8
br label %for.cond
for.end: ; preds = %for.cond
%23 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%24 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %23, i8* align 8 %24, i64 16, i1 false)
%25 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%26 = load { i64*, i32 }, { i64*, i32 }* %25, align 8
ret { i64*, i32 } %26
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratormmEv(%"struct.std::_Bit_iterator"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator"*, align 8
store %"struct.std::_Bit_iterator"* %this, %"struct.std::_Bit_iterator"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator"*, %"struct.std::_Bit_iterator"** %this.addr, align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %this1 to %"struct.std::_Bit_iterator_base"*
call void @_ZNSt18_Bit_iterator_base12_M_bump_downEv(%"struct.std::_Bit_iterator_base"* %0)
ret %"struct.std::_Bit_iterator"* %this1
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSERKS_(%"struct.std::_Bit_reference"* %this, %"struct.std::_Bit_reference"* dereferenceable(16) %__x) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_reference"*, align 8
%__x.addr = alloca %"struct.std::_Bit_reference"*, align 8
store %"struct.std::_Bit_reference"* %this, %"struct.std::_Bit_reference"** %this.addr, align 8
store %"struct.std::_Bit_reference"* %__x, %"struct.std::_Bit_reference"** %__x.addr, align 8
%this1 = load %"struct.std::_Bit_reference"*, %"struct.std::_Bit_reference"** %this.addr, align 8
%0 = load %"struct.std::_Bit_reference"*, %"struct.std::_Bit_reference"** %__x.addr, align 8
%call = call zeroext i1 @_ZNKSt14_Bit_referencecvbEv(%"struct.std::_Bit_reference"* %0)
%call2 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSEb(%"struct.std::_Bit_reference"* %this1, i1 zeroext %call)
ret %"struct.std::_Bit_reference"* %call2
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local void @_ZNSt18_Bit_iterator_base12_M_bump_downEv(%"struct.std::_Bit_iterator_base"* %this) #6 comdat align 2 {
entry:
%this.addr = alloca %"struct.std::_Bit_iterator_base"*, align 8
store %"struct.std::_Bit_iterator_base"* %this, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%this1 = load %"struct.std::_Bit_iterator_base"*, %"struct.std::_Bit_iterator_base"** %this.addr, align 8
%_M_offset = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
%0 = load i32, i32* %_M_offset, align 8
%dec = add i32 %0, -1
store i32 %dec, i32* %_M_offset, align 8
%cmp = icmp eq i32 %0, 0
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
%_M_offset2 = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 1
store i32 63, i32* %_M_offset2, align 8
%_M_p = getelementptr inbounds %"struct.std::_Bit_iterator_base", %"struct.std::_Bit_iterator_base"* %this1, i32 0, i32 0
%1 = load i64*, i64** %_M_p, align 8
%incdec.ptr = getelementptr inbounds i64, i64* %1, i32 -1
store i64* %incdec.ptr, i64** %_M_p, align 8
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local i64 @_ZNKSt6vectorIbSaIbEE8max_sizeEv(%"class.std::vector.0"* %this) #0 comdat align 2 {
entry:
%this.addr = alloca %"class.std::vector.0"*, align 8
%__isize = alloca i64, align 8
%__asize = alloca i64, align 8
store %"class.std::vector.0"* %this, %"class.std::vector.0"** %this.addr, align 8
%this1 = load %"class.std::vector.0"*, %"class.std::vector.0"** %this.addr, align 8
store i64 9223372036854775744, i64* %__isize, align 8
%0 = bitcast %"class.std::vector.0"* %this1 to %"struct.std::_Bvector_base"*
%call = call dereferenceable(1) %"class.std::allocator.1"* @_ZNKSt13_Bvector_baseISaIbEE20_M_get_Bit_allocatorEv(%"struct.std::_Bvector_base"* %0)
%call2 = call i64 @_ZN9__gnu_cxx14__alloc_traitsISaImEE8max_sizeERKS1_(%"class.std::allocator.1"* dereferenceable(1) %call)
store i64 %call2, i64* %__asize, align 8
%1 = load i64, i64* %__asize, align 8
%cmp = icmp ule i64 %1, 144115188075855871
br i1 %cmp, label %cond.true, label %cond.false
cond.true: ; preds = %entry
%2 = load i64, i64* %__asize, align 8
%mul = mul i64 %2, 64
br label %cond.end
cond.false: ; preds = %entry
br label %cond.end
cond.end: ; preds = %cond.false, %cond.true
%cond = phi i64 [ %mul, %cond.true ], [ 9223372036854775744, %cond.false ]
ret i64 %cond
}
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local i64 @_ZN9__gnu_cxx14__alloc_traitsISaImEE8max_sizeERKS1_(%"class.std::allocator.1"* dereferenceable(1) %__a) #6 comdat align 2 {
entry:
%__a.addr = alloca %"class.std::allocator.1"*, align 8
store %"class.std::allocator.1"* %__a, %"class.std::allocator.1"** %__a.addr, align 8
%0 = load %"class.std::allocator.1"*, %"class.std::allocator.1"** %__a.addr, align 8
%1 = bitcast %"class.std::allocator.1"* %0 to %"class.__gnu_cxx::new_allocator.2"*
%call = call i64 @_ZNK9__gnu_cxx13new_allocatorImE8max_sizeEv(%"class.__gnu_cxx::new_allocator.2"* %1) #3
ret i64 %call
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt14__copy_move_a2ILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp3 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp5 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp6 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%12 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 0
%13 = load i64*, i64** %12, align 8
%14 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %11, i32 0, i32 1
%15 = load i32, i32* %14, align 8
%call = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %13, i32 %15)
%16 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%17 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 0
%18 = extractvalue { i64*, i32 } %call, 0
store i64* %18, i64** %17, align 8
%19 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %16, i32 0, i32 1
%20 = extractvalue { i64*, i32 } %call, 1
store i32 %20, i32* %19, align 8
%21 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to i8*
%22 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %21, i8* align 8 %22, i64 16, i1 false)
%23 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp3 to { i64*, i32 }*
%24 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 0
%25 = load i64*, i64** %24, align 8
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %23, i32 0, i32 1
%27 = load i32, i32* %26, align 8
%call4 = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %25, i32 %27)
%28 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%29 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 0
%30 = extractvalue { i64*, i32 } %call4, 0
store i64* %30, i64** %29, align 8
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %28, i32 0, i32 1
%32 = extractvalue { i64*, i32 } %call4, 1
store i32 %32, i32* %31, align 8
%33 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to i8*
%34 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %33, i8* align 8 %34, i64 16, i1 false)
%35 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp6 to { i64*, i32 }*
%36 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 0
%37 = load i64*, i64** %36, align 8
%38 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %35, i32 0, i32 1
%39 = load i32, i32* %38, align 8
%call7 = call { i64*, i32 } @_ZSt12__niter_baseISt13_Bit_iteratorET_S1_(i64* %37, i32 %39)
%40 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%41 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 0
%42 = extractvalue { i64*, i32 } %call7, 0
store i64* %42, i64** %41, align 8
%43 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %40, i32 0, i32 1
%44 = extractvalue { i64*, i32 } %call7, 1
store i32 %44, i32* %43, align 8
%45 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%46 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 0
%47 = load i64*, i64** %46, align 8
%48 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %45, i32 0, i32 1
%49 = load i32, i32* %48, align 8
%50 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%51 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 0
%52 = load i64*, i64** %51, align 8
%53 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %50, i32 0, i32 1
%54 = load i32, i32* %53, align 8
%55 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp5 to { i64*, i32 }*
%56 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 0
%57 = load i64*, i64** %56, align 8
%58 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %55, i32 0, i32 1
%59 = load i32, i32* %58, align 8
%call8 = call { i64*, i32 } @_ZSt13__copy_move_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %47, i32 %49, i64* %52, i32 %54, i64* %57, i32 %59)
%60 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%61 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 0
%62 = extractvalue { i64*, i32 } %call8, 0
store i64* %62, i64** %61, align 8
%63 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %60, i32 0, i32 1
%64 = extractvalue { i64*, i32 } %call8, 1
store i32 %64, i32* %63, align 8
%65 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%66 = load { i64*, i32 }, { i64*, i32 }* %65, align 8
ret { i64*, i32 } %66
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZSt13__copy_move_aILb0ESt13_Bit_iteratorS0_ET1_T0_S2_S1_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__simple = alloca i8, align 1
%agg.tmp = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp1 = alloca %"struct.std::_Bit_iterator", align 8
%agg.tmp2 = alloca %"struct.std::_Bit_iterator", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
store i8 0, i8* %__simple, align 1
%9 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to i8*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %9, i8* align 8 %10, i64 16, i1 false)
%11 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to i8*
%12 = bitcast %"struct.std::_Bit_iterator"* %__last to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %11, i8* align 8 %12, i64 16, i1 false)
%13 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to i8*
%14 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %13, i8* align 8 %14, i64 16, i1 false)
%15 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp to { i64*, i32 }*
%16 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 0
%17 = load i64*, i64** %16, align 8
%18 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %15, i32 0, i32 1
%19 = load i32, i32* %18, align 8
%20 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp1 to { i64*, i32 }*
%21 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 0
%22 = load i64*, i64** %21, align 8
%23 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %20, i32 0, i32 1
%24 = load i32, i32* %23, align 8
%25 = bitcast %"struct.std::_Bit_iterator"* %agg.tmp2 to { i64*, i32 }*
%26 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 0
%27 = load i64*, i64** %26, align 8
%28 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %25, i32 0, i32 1
%29 = load i32, i32* %28, align 8
%call = call { i64*, i32 } @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt13_Bit_iteratorS3_EET0_T_S5_S4_(i64* %17, i32 %19, i64* %22, i32 %24, i64* %27, i32 %29)
%30 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%31 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 0
%32 = extractvalue { i64*, i32 } %call, 0
store i64* %32, i64** %31, align 8
%33 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %30, i32 0, i32 1
%34 = extractvalue { i64*, i32 } %call, 1
store i32 %34, i32* %33, align 8
%35 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%36 = load { i64*, i32 }, { i64*, i32 }* %35, align 8
ret { i64*, i32 } %36
}
; Function Attrs: noinline optnone uwtable
define linkonce_odr dso_local { i64*, i32 } @_ZNSt11__copy_moveILb0ELb0ESt26random_access_iterator_tagE8__copy_mISt13_Bit_iteratorS3_EET0_T_S5_S4_(i64* %__first.coerce0, i32 %__first.coerce1, i64* %__last.coerce0, i32 %__last.coerce1, i64* %__result.coerce0, i32 %__result.coerce1) #0 comdat align 2 {
entry:
%retval = alloca %"struct.std::_Bit_iterator", align 8
%__first = alloca %"struct.std::_Bit_iterator", align 8
%__last = alloca %"struct.std::_Bit_iterator", align 8
%__result = alloca %"struct.std::_Bit_iterator", align 8
%__n = alloca i64, align 8
%ref.tmp = alloca %"struct.std::_Bit_reference", align 8
%ref.tmp2 = alloca %"struct.std::_Bit_reference", align 8
%0 = bitcast %"struct.std::_Bit_iterator"* %__first to { i64*, i32 }*
%1 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 0
store i64* %__first.coerce0, i64** %1, align 8
%2 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %0, i32 0, i32 1
store i32 %__first.coerce1, i32* %2, align 8
%3 = bitcast %"struct.std::_Bit_iterator"* %__last to { i64*, i32 }*
%4 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 0
store i64* %__last.coerce0, i64** %4, align 8
%5 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %3, i32 0, i32 1
store i32 %__last.coerce1, i32* %5, align 8
%6 = bitcast %"struct.std::_Bit_iterator"* %__result to { i64*, i32 }*
%7 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 0
store i64* %__result.coerce0, i64** %7, align 8
%8 = getelementptr inbounds { i64*, i32 }, { i64*, i32 }* %6, i32 0, i32 1
store i32 %__result.coerce1, i32* %8, align 8
%9 = bitcast %"struct.std::_Bit_iterator"* %__last to %"struct.std::_Bit_iterator_base"*
%10 = bitcast %"struct.std::_Bit_iterator"* %__first to %"struct.std::_Bit_iterator_base"*
%call = call i64 @_ZStmiRKSt18_Bit_iterator_baseS1_(%"struct.std::_Bit_iterator_base"* dereferenceable(16) %9, %"struct.std::_Bit_iterator_base"* dereferenceable(16) %10)
store i64 %call, i64* %__n, align 8
br label %for.cond
for.cond: ; preds = %for.inc, %entry
%11 = load i64, i64* %__n, align 8
%cmp = icmp sgt i64 %11, 0
br i1 %cmp, label %for.body, label %for.end
for.body: ; preds = %for.cond
%call1 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %__first)
%12 = bitcast %"struct.std::_Bit_reference"* %ref.tmp to { i64*, i64 }*
%13 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 0
%14 = extractvalue { i64*, i64 } %call1, 0
store i64* %14, i64** %13, align 8
%15 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %12, i32 0, i32 1
%16 = extractvalue { i64*, i64 } %call1, 1
store i64 %16, i64* %15, align 8
%call3 = call { i64*, i64 } @_ZNKSt13_Bit_iteratordeEv(%"struct.std::_Bit_iterator"* %__result)
%17 = bitcast %"struct.std::_Bit_reference"* %ref.tmp2 to { i64*, i64 }*
%18 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %17, i32 0, i32 0
%19 = extractvalue { i64*, i64 } %call3, 0
store i64* %19, i64** %18, align 8
%20 = getelementptr inbounds { i64*, i64 }, { i64*, i64 }* %17, i32 0, i32 1
%21 = extractvalue { i64*, i64 } %call3, 1
store i64 %21, i64* %20, align 8
%call4 = call dereferenceable(16) %"struct.std::_Bit_reference"* @_ZNSt14_Bit_referenceaSERKS_(%"struct.std::_Bit_reference"* %ref.tmp2, %"struct.std::_Bit_reference"* dereferenceable(16) %ref.tmp)
%call5 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorppEv(%"struct.std::_Bit_iterator"* %__first)
%call6 = call dereferenceable(16) %"struct.std::_Bit_iterator"* @_ZNSt13_Bit_iteratorppEv(%"struct.std::_Bit_iterator"* %__result)
br label %for.inc
for.inc: ; preds = %for.body
%22 = load i64, i64* %__n, align 8
%dec = add nsw i64 %22, -1
store i64 %dec, i64* %__n, align 8
br label %for.cond
for.end: ; preds = %for.cond
%23 = bitcast %"struct.std::_Bit_iterator"* %retval to i8*
%24 = bitcast %"struct.std::_Bit_iterator"* %__result to i8*
call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %23, i8* align 8 %24, i64 16, i1 false)
%25 = bitcast %"struct.std::_Bit_iterator"* %retval to { i64*, i32 }*
%26 = load { i64*, i32 }, { i64*, i32 }* %25, align 8
ret { i64*, i32 } %26
}
; Function Attrs: noinline uwtable
define internal void @_GLOBAL__sub_I_main_test_cu.cu() #2 section ".text.startup" {
entry:
call void @__cxx_global_var_init()
ret void
}
define internal void @__cuda_register_globals(i8** %0) {
entry:
%1 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i8*, i64, i32*)* @_Z12histo_kernelPhlPj to i8*), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @0, i64 0, i64 0), i8* getelementptr inbounds ([22 x i8], [22 x i8]* @0, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%2 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32*, i32*, i32*, i32*, i32*)* @_ZL26vlc_encode_kernel_sm64huffPjPKjS1_S_S_S_S_S_ to i8*), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @1, i64 0, i64 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @1, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%3 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb1ELb0EEvPjPKjS0_iii to i8*), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @2, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @2, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%4 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb1ELb1EEvPjPKjS0_iii to i8*), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @3, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @3, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%5 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32, i32, i32)* @_ZL10uniformAddPjS_iii to i8*), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @4, i64 0, i64 0), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @4, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%6 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb0ELb0EEvPjPKjS0_iii to i8*), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @5, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @5, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%7 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32, i32, i32)* @_ZL7prescanILb0ELb1EEvPjPKjS0_iii to i8*), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @6, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @6, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
%8 = call i32 @__cudaRegisterFunction(i8** %0, i8* bitcast (void (i32*, i32*, i32*, i32*, i32)* @_ZL5pack2PjS_S_S_j to i8*), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @7, i64 0, i64 0), i8* getelementptr inbounds ([19 x i8], [19 x i8]* @7, i64 0, i64 0), i32 -1, i8* null, i8* null, i8* null, i8* null, i32* null)
ret void
}
declare dso_local i32 @__cudaRegisterFunction(i8**, i8*, i8*, i8*, i32, i8*, i8*, i8*, i8*, i32*)
declare dso_local i32 @__cudaRegisterVar(i8**, i8*, i8*, i8*, i32, i32, i32, i32)
declare dso_local i8** @__cudaRegisterFatBinary(i8*)
define internal void @__cuda_module_ctor(i8* %0) {
entry:
%1 = call i8** @__cudaRegisterFatBinary(i8* bitcast ({ i32, i32, i8*, i8* }* @__cuda_fatbin_wrapper to i8*))
store i8** %1, i8*** @__cuda_gpubin_handle, align 8
call void @__cuda_register_globals(i8** %1)
call void @__cudaRegisterFatBinaryEnd(i8** %1)
%2 = call i32 @atexit(void (i8*)* @__cuda_module_dtor)
ret void
}
declare dso_local void @__cudaRegisterFatBinaryEnd(i8**)
declare dso_local void @__cudaUnregisterFatBinary(i8**)
define internal void @__cuda_module_dtor(i8* %0) {
entry:
%1 = load i8**, i8*** @__cuda_gpubin_handle, align 8
call void @__cudaUnregisterFatBinary(i8** %1)
ret void
}
declare dso_local i32 @atexit(void (i8*)*)
attributes #0 = { noinline optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { noinline uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #3 = { nounwind }
attributes #4 = { argmemonly nounwind willreturn }
attributes #5 = { noreturn nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #6 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #7 = { noinline noreturn nounwind }
attributes #8 = { nobuiltin "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #9 = { nobuiltin nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #10 = { nounwind readonly }
attributes #11 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #12 = { noinline norecurse optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #13 = { nounwind readnone speculatable willreturn }
attributes #14 = { nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #15 = { noreturn "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #16 = { noreturn nounwind }
attributes #17 = { builtin }
attributes #18 = { builtin nounwind }
attributes #19 = { noreturn }
!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!2}
!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 10, i32 1]}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{!"clang version 10.0.1 (https://github.com/llvm/llvm-project.git ef32c611aa214dea855364efd7ba451ec5ec3f74)"}