Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc < %s | FileCheck %s
      2 target datalayout = "e-m:e-i64:64-n32:64"
      3 target triple = "powerpc64le-unknown-linux-gnu"
      4 
      5 ; This test checks for misordering of a TOC restore instruction relative
      6 ; to subsequent uses of the TOC register.  Previously this test broke
      7 ; because there was no TOC register dependency between the instructions,
      8 ; and the usual stack-adjust instructions that held the TOC restore in
      9 ; place were optimized away.
     10 
     11 %"class.llvm::Module" = type { %"class.llvm::LLVMContext"*, %"class.llvm::iplist", %"class.llvm::iplist.0", %"class.llvm::iplist.9", %"struct.llvm::ilist", %"class.std::basic_string", %"class.llvm::ValueSymbolTable"*, %"class.llvm::StringMap", %"class.std::unique_ptr", %"class.std::basic_string", %"class.std::basic_string", i8*, %"class.llvm::RandomNumberGenerator"*, %"class.std::basic_string", %"class.llvm::DataLayout" }
     12 %"class.llvm::iplist" = type { %"struct.llvm::ilist_traits", %"class.llvm::GlobalVariable"* }
     13 %"struct.llvm::ilist_traits" = type { %"class.llvm::ilist_node" }
     14 %"class.llvm::ilist_node" = type { %"class.llvm::ilist_half_node", %"class.llvm::GlobalVariable"* }
     15 %"class.llvm::ilist_half_node" = type { %"class.llvm::GlobalVariable"* }
     16 %"class.llvm::GlobalVariable" = type { %"class.llvm::GlobalObject", %"class.llvm::ilist_node", i8 }
     17 %"class.llvm::GlobalObject" = type { %"class.llvm::GlobalValue", %"class.std::basic_string", %"class.llvm::Comdat"* }
     18 %"class.llvm::GlobalValue" = type { %"class.llvm::Constant", i32, %"class.llvm::Module"* }
     19 %"class.llvm::Constant" = type { %"class.llvm::User" }
     20 %"class.llvm::User" = type { %"class.llvm::Value.base", i32, %"class.llvm::Use"* }
     21 %"class.llvm::Value.base" = type <{ i32 (...)**, %"class.llvm::Type"*, %"class.llvm::Use"*, %"class.llvm::StringMapEntry"*, i8, i8, i16 }>
     22 %"class.llvm::Type" = type { %"class.llvm::LLVMContext"*, i32, i32, %"class.llvm::Type"** }
     23 %"class.llvm::StringMapEntry" = type opaque
     24 %"class.llvm::Use" = type { %"class.llvm::Value"*, %"class.llvm::Use"*, %"class.llvm::PointerIntPair" }
     25 %"class.llvm::Value" = type { i32 (...)**, %"class.llvm::Type"*, %"class.llvm::Use"*, %"class.llvm::StringMapEntry"*, i8, i8, i16 }
     26 %"class.llvm::PointerIntPair" = type { i64 }
     27 %"class.llvm::Comdat" = type { %"class.llvm::StringMapEntry.43"*, i32 }
     28 %"class.llvm::StringMapEntry.43" = type opaque
     29 %"class.llvm::iplist.0" = type { %"struct.llvm::ilist_traits.1", %"class.llvm::Function"* }
     30 %"struct.llvm::ilist_traits.1" = type { %"class.llvm::ilist_node.7" }
     31 %"class.llvm::ilist_node.7" = type { %"class.llvm::ilist_half_node.8", %"class.llvm::Function"* }
     32 %"class.llvm::ilist_half_node.8" = type { %"class.llvm::Function"* }
     33 %"class.llvm::Function" = type { %"class.llvm::GlobalObject", %"class.llvm::ilist_node.7", %"class.llvm::iplist.44", %"class.llvm::iplist.52", %"class.llvm::ValueSymbolTable"*, %"class.llvm::AttributeSet" }
     34 %"class.llvm::iplist.44" = type { %"struct.llvm::ilist_traits.45", %"class.llvm::BasicBlock"* }
     35 %"struct.llvm::ilist_traits.45" = type { %"class.llvm::ilist_half_node.51" }
     36 %"class.llvm::ilist_half_node.51" = type { %"class.llvm::BasicBlock"* }
     37 %"class.llvm::BasicBlock" = type { %"class.llvm::Value.base", %"class.llvm::ilist_node.61", %"class.llvm::iplist.62", %"class.llvm::Function"* }
     38 %"class.llvm::ilist_node.61" = type { %"class.llvm::ilist_half_node.51", %"class.llvm::BasicBlock"* }
     39 %"class.llvm::iplist.62" = type { %"struct.llvm::ilist_traits.63", %"class.llvm::Instruction"* }
     40 %"struct.llvm::ilist_traits.63" = type { %"class.llvm::ilist_half_node.69" }
     41 %"class.llvm::ilist_half_node.69" = type { %"class.llvm::Instruction"* }
     42 %"class.llvm::Instruction" = type { %"class.llvm::User", %"class.llvm::ilist_node.70", %"class.llvm::BasicBlock"*, %"class.llvm::DebugLoc" }
     43 %"class.llvm::ilist_node.70" = type { %"class.llvm::ilist_half_node.69", %"class.llvm::Instruction"* }
     44 %"class.llvm::DebugLoc" = type { i32, i32 }
     45 %"class.llvm::iplist.52" = type { %"struct.llvm::ilist_traits.53", %"class.llvm::Argument"* }
     46 %"struct.llvm::ilist_traits.53" = type { %"class.llvm::ilist_half_node.59" }
     47 %"class.llvm::ilist_half_node.59" = type { %"class.llvm::Argument"* }
     48 %"class.llvm::Argument" = type { %"class.llvm::Value.base", %"class.llvm::ilist_node.60", %"class.llvm::Function"* }
     49 %"class.llvm::ilist_node.60" = type { %"class.llvm::ilist_half_node.59", %"class.llvm::Argument"* }
     50 %"class.llvm::AttributeSet" = type { %"class.llvm::AttributeSetImpl"* }
     51 %"class.llvm::AttributeSetImpl" = type opaque
     52 %"class.llvm::iplist.9" = type { %"struct.llvm::ilist_traits.10", %"class.llvm::GlobalAlias"* }
     53 %"struct.llvm::ilist_traits.10" = type { %"class.llvm::ilist_node.16" }
     54 %"class.llvm::ilist_node.16" = type { %"class.llvm::ilist_half_node.17", %"class.llvm::GlobalAlias"* }
     55 %"class.llvm::ilist_half_node.17" = type { %"class.llvm::GlobalAlias"* }
     56 %"class.llvm::GlobalAlias" = type { %"class.llvm::GlobalValue", %"class.llvm::ilist_node.16" }
     57 %"struct.llvm::ilist" = type { %"class.llvm::iplist.18" }
     58 %"class.llvm::iplist.18" = type { %"struct.llvm::ilist_traits.19", %"class.llvm::NamedMDNode"* }
     59 %"struct.llvm::ilist_traits.19" = type { %"class.llvm::ilist_node.24" }
     60 %"class.llvm::ilist_node.24" = type { %"class.llvm::ilist_half_node.25", %"class.llvm::NamedMDNode"* }
     61 %"class.llvm::ilist_half_node.25" = type { %"class.llvm::NamedMDNode"* }
     62 %"class.llvm::NamedMDNode" = type { %"class.llvm::ilist_node.24", %"class.std::basic_string", %"class.llvm::Module"*, i8* }
     63 %"class.llvm::ValueSymbolTable" = type opaque
     64 %"class.llvm::StringMap" = type { %"class.llvm::StringMapImpl", %"class.llvm::MallocAllocator" }
     65 %"class.llvm::StringMapImpl" = type { %"class.llvm::StringMapEntryBase"**, i32, i32, i32, i32 }
     66 %"class.llvm::StringMapEntryBase" = type { i32 }
     67 %"class.llvm::MallocAllocator" = type { i8 }
     68 %"class.std::unique_ptr" = type { %"class.std::tuple" }
     69 %"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
     70 %"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.28" }
     71 %"struct.std::_Head_base.28" = type { %"class.llvm::GVMaterializer"* }
     72 %"class.llvm::GVMaterializer" = type opaque
     73 %"class.llvm::RandomNumberGenerator" = type opaque
     74 %"class.std::basic_string" = type { %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" }
     75 %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" = type { i8* }
     76 %"class.llvm::DataLayout" = type { i8, i32, i32, [4 x i8], %"class.llvm::SmallVector", %"class.llvm::SmallVector.29", %"class.llvm::SmallVector.36", i8* }
     77 %"class.llvm::SmallVector" = type { %"class.llvm::SmallVectorImpl.base", %"struct.llvm::SmallVectorStorage" }
     78 %"class.llvm::SmallVectorImpl.base" = type { %"class.llvm::SmallVectorTemplateBase.base" }
     79 %"class.llvm::SmallVectorTemplateBase.base" = type { %"class.llvm::SmallVectorTemplateCommon.base" }
     80 %"class.llvm::SmallVectorTemplateCommon.base" = type <{ %"class.llvm::SmallVectorBase", %"struct.llvm::AlignedCharArrayUnion" }>
     81 %"class.llvm::SmallVectorBase" = type { i8*, i8*, i8* }
     82 %"struct.llvm::AlignedCharArrayUnion" = type { %"struct.llvm::AlignedCharArray" }
     83 %"struct.llvm::AlignedCharArray" = type { [1 x i8] }
     84 %"struct.llvm::SmallVectorStorage" = type { [7 x %"struct.llvm::AlignedCharArrayUnion"] }
     85 %"class.llvm::SmallVector.29" = type { %"class.llvm::SmallVectorImpl.30", %"struct.llvm::SmallVectorStorage.35" }
     86 %"class.llvm::SmallVectorImpl.30" = type { %"class.llvm::SmallVectorTemplateBase.31" }
     87 %"class.llvm::SmallVectorTemplateBase.31" = type { %"class.llvm::SmallVectorTemplateCommon.32" }
     88 %"class.llvm::SmallVectorTemplateCommon.32" = type { %"class.llvm::SmallVectorBase", %"struct.llvm::AlignedCharArrayUnion.33" }
     89 %"struct.llvm::AlignedCharArrayUnion.33" = type { %"struct.llvm::AlignedCharArray.34" }
     90 %"struct.llvm::AlignedCharArray.34" = type { [8 x i8] }
     91 %"struct.llvm::SmallVectorStorage.35" = type { [15 x %"struct.llvm::AlignedCharArrayUnion.33"] }
     92 %"class.llvm::SmallVector.36" = type { %"class.llvm::SmallVectorImpl.37", %"struct.llvm::SmallVectorStorage.42" }
     93 %"class.llvm::SmallVectorImpl.37" = type { %"class.llvm::SmallVectorTemplateBase.38" }
     94 %"class.llvm::SmallVectorTemplateBase.38" = type { %"class.llvm::SmallVectorTemplateCommon.39" }
     95 %"class.llvm::SmallVectorTemplateCommon.39" = type { %"class.llvm::SmallVectorBase", %"struct.llvm::AlignedCharArrayUnion.40" }
     96 %"struct.llvm::AlignedCharArrayUnion.40" = type { %"struct.llvm::AlignedCharArray.41" }
     97 %"struct.llvm::AlignedCharArray.41" = type { [16 x i8] }
     98 %"struct.llvm::SmallVectorStorage.42" = type { [7 x %"struct.llvm::AlignedCharArrayUnion.40"] }
     99 %"class.llvm::SMDiagnostic" = type { %"class.llvm::SourceMgr"*, %"class.llvm::SMLoc", %"class.std::basic_string", i32, i32, i32, %"class.std::basic_string", %"class.std::basic_string", %"class.std::vector.79", %"class.llvm::SmallVector.84" }
    100 %"class.llvm::SourceMgr" = type { %"class.std::vector", %"class.std::vector.74", i8*, void (%"class.llvm::SMDiagnostic"*, i8*)*, i8* }
    101 %"class.std::vector" = type { %"struct.std::_Vector_base" }
    102 %"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<llvm::SourceMgr::SrcBuffer, std::allocator<llvm::SourceMgr::SrcBuffer> >::_Vector_impl" }
    103 %"struct.std::_Vector_base<llvm::SourceMgr::SrcBuffer, std::allocator<llvm::SourceMgr::SrcBuffer> >::_Vector_impl" = type { %"struct.llvm::SourceMgr::SrcBuffer"*, %"struct.llvm::SourceMgr::SrcBuffer"*, %"struct.llvm::SourceMgr::SrcBuffer"* }
    104 %"struct.llvm::SourceMgr::SrcBuffer" = type { %"class.llvm::MemoryBuffer"*, %"class.llvm::SMLoc" }
    105 %"class.llvm::MemoryBuffer" = type { i32 (...)**, i8*, i8* }
    106 %"class.std::vector.74" = type { %"struct.std::_Vector_base.75" }
    107 %"struct.std::_Vector_base.75" = type { %"struct.std::_Vector_base<std::basic_string<char>, std::allocator<std::basic_string<char> > >::_Vector_impl" }
    108 %"struct.std::_Vector_base<std::basic_string<char>, std::allocator<std::basic_string<char> > >::_Vector_impl" = type { %"class.std::basic_string"*, %"class.std::basic_string"*, %"class.std::basic_string"* }
    109 %"class.llvm::SMLoc" = type { i8* }
    110 %"class.std::vector.79" = type { %"struct.std::_Vector_base.80" }
    111 %"struct.std::_Vector_base.80" = type { %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >::_Vector_impl" }
    112 %"struct.std::_Vector_base<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > >::_Vector_impl" = type { %"struct.std::pair"*, %"struct.std::pair"*, %"struct.std::pair"* }
    113 %"struct.std::pair" = type { i32, i32 }
    114 %"class.llvm::SmallVector.84" = type { %"class.llvm::SmallVectorImpl.85", %"struct.llvm::SmallVectorStorage.90" }
    115 %"class.llvm::SmallVectorImpl.85" = type { %"class.llvm::SmallVectorTemplateBase.86" }
    116 %"class.llvm::SmallVectorTemplateBase.86" = type { %"class.llvm::SmallVectorTemplateCommon.87" }
    117 %"class.llvm::SmallVectorTemplateCommon.87" = type { %"class.llvm::SmallVectorBase", %"struct.llvm::AlignedCharArrayUnion.88" }
    118 %"struct.llvm::AlignedCharArrayUnion.88" = type { %"struct.llvm::AlignedCharArray.89" }
    119 %"struct.llvm::AlignedCharArray.89" = type { [24 x i8] }
    120 %"struct.llvm::SmallVectorStorage.90" = type { [3 x %"struct.llvm::AlignedCharArrayUnion.88"] }
    121 %"class.llvm::LLVMContext" = type { %"class.llvm::LLVMContextImpl"* }
    122 %"class.llvm::LLVMContextImpl" = type opaque
    123 %"class.std::allocator" = type { i8 }
    124 %"class.llvm::ErrorOr.109" = type { %union.anon.110, i8, [7 x i8] }
    125 %union.anon.110 = type { %"struct.llvm::AlignedCharArrayUnion.93" }
    126 %"struct.llvm::AlignedCharArrayUnion.93" = type { %"struct.llvm::AlignedCharArray.94" }
    127 %"struct.llvm::AlignedCharArray.94" = type { [16 x i8] }
    128 %"class.llvm::ErrorOr" = type { %union.anon, i8, [7 x i8] }
    129 %union.anon = type { %"struct.llvm::AlignedCharArrayUnion.93" }
    130 %"class.std::error_category" = type { i32 (...)** }
    131 %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep" = type { %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base" }
    132 %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base" = type { i64, i64, i32 }
    133 %"class.llvm::SMFixIt" = type { %"class.llvm::SMRange", %"class.std::basic_string" }
    134 %"class.llvm::SMRange" = type { %"class.llvm::SMLoc", %"class.llvm::SMLoc" }
    135 %"struct.llvm::NamedRegionTimer" = type { %"class.llvm::TimeRegion" }
    136 %"class.llvm::TimeRegion" = type { %"class.llvm::Timer"* }
    137 %"class.llvm::Timer" = type { %"class.llvm::TimeRecord", %"class.std::basic_string", i8, %"class.llvm::TimerGroup"*, %"class.llvm::Timer"**, %"class.llvm::Timer"* }
    138 %"class.llvm::TimeRecord" = type { double, double, double, i64 }
    139 %"class.llvm::TimerGroup" = type { %"class.std::basic_string", %"class.llvm::Timer"*, %"class.std::vector.103", %"class.llvm::TimerGroup"**, %"class.llvm::TimerGroup"* }
    140 %"class.std::vector.103" = type { %"struct.std::_Vector_base.104" }
    141 %"struct.std::_Vector_base.104" = type { %"struct.std::_Vector_base<std::pair<llvm::TimeRecord, std::basic_string<char> >, std::allocator<std::pair<llvm::TimeRecord, std::basic_string<char> > > >::_Vector_impl" }
    142 %"struct.std::_Vector_base<std::pair<llvm::TimeRecord, std::basic_string<char> >, std::allocator<std::pair<llvm::TimeRecord, std::basic_string<char> > > >::_Vector_impl" = type { %"struct.std::pair.108"*, %"struct.std::pair.108"*, %"struct.std::pair.108"* }
    143 %"struct.std::pair.108" = type opaque
    144 %struct.LLVMOpaqueContext = type opaque
    145 %struct.LLVMOpaqueMemoryBuffer = type opaque
    146 %struct.LLVMOpaqueModule = type opaque
    147 %"class.llvm::raw_string_ostream" = type { %"class.llvm::raw_ostream.base", %"class.std::basic_string"* }
    148 %"class.llvm::raw_ostream.base" = type <{ i32 (...)**, i8*, i8*, i8*, i32 }>
    149 %"class.llvm::raw_ostream" = type { i32 (...)**, i8*, i8*, i8*, i32 }
    150 
    151 @.str = private unnamed_addr constant [28 x i8] c"Could not open input file: \00", align 1
    152 @.str1 = private unnamed_addr constant [54 x i8] c"!HasError && \22Cannot get value when an error exists!\22\00", align 1
    153 @.str2 = private unnamed_addr constant [61 x i8] c"/home/wschmidt/llvm/llvm-test/include/llvm/Support/ErrorOr.h\00", align 1
    154 @__PRETTY_FUNCTION__._ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv = private unnamed_addr constant [206 x i8] c"storage_type *llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> > >::getStorage() [T = std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer> >]\00", align 1
    155 @_ZNSs4_Rep20_S_empty_rep_storageE = external global [0 x i64]
    156 
    157 declare void @_ZN4llvm12MemoryBuffer14getFileOrSTDINENS_9StringRefEl(%"class.llvm::ErrorOr"* sret, [2 x i64], i64) #1
    158 
    159 declare void @_ZN4llvm16NamedRegionTimerC1ENS_9StringRefES1_b(%"struct.llvm::NamedRegionTimer"*, [2 x i64], [2 x i64], i1 zeroext) #1
    160 
    161 ; Function Attrs: nounwind
    162 define %"class.llvm::Module"* @_ZN4llvm11ParseIRFileERKSsRNS_12SMDiagnosticERNS_11LLVMContextE(%"class.std::basic_string"* nocapture readonly dereferenceable(8) %Filename, %"class.llvm::SMDiagnostic"* dereferenceable(200) %Err, %"class.llvm::LLVMContext"* dereferenceable(8) %Context) #0 {
    163 entry:
    164 ; CHECK: .globl	_ZN4llvm11ParseIRFileERKSsRNS_12SMDiagnosticERNS_11LLVMContextE
    165 ; CHECK: bctrl
    166 ; CHECK: ld 2, 24(1)
    167 ; CHECK: addis [[REG:[0-9]+]], 2, .L.str@toc@ha
    168 ; CHECK: addi {{[0-9]+}}, [[REG]], .L.str@toc@l
    169 ; CHECK: bl _ZNSs6insertEmPKcm
    170   %.atomicdst.i.i.i.i.i46 = alloca i32, align 4
    171   %ref.tmp.i.i47 = alloca %"class.std::allocator", align 1
    172   %.atomicdst.i.i.i.i.i = alloca i32, align 4
    173   %ref.tmp.i.i = alloca %"class.std::allocator", align 1
    174   %ref.tmp.i.i2.i = alloca %"class.std::allocator", align 1
    175   %ref.tmp.i.i.i = alloca %"class.std::allocator", align 1
    176   %FileOrErr = alloca %"class.llvm::ErrorOr", align 8
    177   %ref.tmp = alloca %"class.llvm::SMDiagnostic", align 8
    178   %ref.tmp5 = alloca %"class.std::basic_string", align 8
    179   %_M_p.i.i.i = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %Filename, i64 0, i32 0, i32 0
    180   %0 = load i8*, i8** %_M_p.i.i.i, align 8, !tbaa !1
    181   %1 = ptrtoint i8* %0 to i64
    182   %arrayidx.i.i.i = getelementptr inbounds i8, i8* %0, i64 -24
    183   %_M_length.i.i = bitcast i8* %arrayidx.i.i.i to i64*
    184   %2 = load i64, i64* %_M_length.i.i, align 8, !tbaa !7
    185   %.fca.0.insert18 = insertvalue [2 x i64] undef, i64 %1, 0
    186   %.fca.1.insert21 = insertvalue [2 x i64] %.fca.0.insert18, i64 %2, 1
    187   call void @_ZN4llvm12MemoryBuffer14getFileOrSTDINENS_9StringRefEl(%"class.llvm::ErrorOr"* sret %FileOrErr, [2 x i64] %.fca.1.insert21, i64 -1) #3
    188   %HasError.i24 = getelementptr inbounds %"class.llvm::ErrorOr", %"class.llvm::ErrorOr"* %FileOrErr, i64 0, i32 1
    189   %bf.load.i25 = load i8, i8* %HasError.i24, align 8
    190   %3 = and i8 %bf.load.i25, 1
    191   %bf.cast.i26 = icmp eq i8 %3, 0
    192   br i1 %bf.cast.i26, label %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE3getEv.exit, label %_ZNK4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE8getErrorEv.exit
    193 
    194 _ZNK4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE8getErrorEv.exit: ; preds = %entry
    195   %retval.sroa.0.0..sroa_cast.i = bitcast %"class.llvm::ErrorOr"* %FileOrErr to i64*
    196   %retval.sroa.0.0.copyload.i = load i64, i64* %retval.sroa.0.0..sroa_cast.i, align 8
    197   %retval.sroa.3.0..sroa_idx.i = getelementptr inbounds %"class.llvm::ErrorOr", %"class.llvm::ErrorOr"* %FileOrErr, i64 0, i32 0, i32 0, i32 0, i32 0, i64 8
    198   %retval.sroa.3.0..sroa_cast.i = bitcast i8* %retval.sroa.3.0..sroa_idx.i to i64*
    199   %retval.sroa.3.0.copyload.i = load i64, i64* %retval.sroa.3.0..sroa_cast.i, align 8
    200   %phitmp = trunc i64 %retval.sroa.0.0.copyload.i to i32
    201   %cmp.i = icmp eq i32 %phitmp, 0
    202   br i1 %cmp.i, label %cond.false.i.i, label %if.then
    203 
    204 if.then:                                          ; preds = %_ZNK4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE8getErrorEv.exit
    205   %.c = inttoptr i64 %retval.sroa.3.0.copyload.i to %"class.std::error_category"*
    206   %4 = load i8*, i8** %_M_p.i.i.i, align 8, !tbaa !1
    207   %arrayidx.i.i.i30 = getelementptr inbounds i8, i8* %4, i64 -24
    208   %_M_length.i.i31 = bitcast i8* %arrayidx.i.i.i30 to i64*
    209   %5 = load i64, i64* %_M_length.i.i31, align 8, !tbaa !7
    210   %6 = inttoptr i64 %retval.sroa.3.0.copyload.i to void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)***
    211   %vtable.i = load void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)**, void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)*** %6, align 8, !tbaa !11
    212   %vfn.i = getelementptr inbounds void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)** %vtable.i, i64 3
    213   %7 = load void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.std::error_category"*, i32)** %vfn.i, align 8
    214   call void %7(%"class.std::basic_string"* sret %ref.tmp5, %"class.std::error_category"* %.c, i32 signext %phitmp) #3
    215   %call2.i.i = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6insertEmPKcm(%"class.std::basic_string"* %ref.tmp5, i64 0, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str, i64 0, i64 0), i64 27) #3
    216   %_M_p2.i.i.i.i = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %call2.i.i, i64 0, i32 0, i32 0
    217   %8 = load i8*, i8** %_M_p2.i.i.i.i, align 8, !tbaa !13
    218   store i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*), i8** %_M_p2.i.i.i.i, align 8, !tbaa !1
    219   %arrayidx.i.i.i36 = getelementptr inbounds i8, i8* %8, i64 -24
    220   %_M_length.i.i37 = bitcast i8* %arrayidx.i.i.i36 to i64*
    221   %9 = load i64, i64* %_M_length.i.i37, align 8, !tbaa !7
    222   %Filename.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 2
    223   %10 = getelementptr inbounds %"class.std::allocator", %"class.std::allocator"* %ref.tmp.i.i2.i, i64 0, i32 0
    224   %11 = bitcast %"class.llvm::SMDiagnostic"* %ref.tmp to i8*
    225   call void @llvm.memset.p0i8.i64(i8* %11, i8 0, i64 16, i32 8, i1 false) #3
    226   call void @llvm.lifetime.start(i64 1, i8* %10) #3
    227   %tobool.i.i4.i = icmp eq i8* %4, null
    228   br i1 %tobool.i.i4.i, label %if.then.i.i6.i, label %if.end.i.i8.i
    229 
    230 if.then.i.i6.i:                                   ; preds = %if.then
    231   %_M_p.i.i.i.i.i.i5.i = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %Filename.i, i64 0, i32 0, i32 0
    232   store i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*), i8** %_M_p.i.i.i.i.i.i5.i, align 8, !tbaa !13
    233   br label %_ZNK4llvm9StringRefcvSsEv.exit9.i
    234 
    235 if.end.i.i8.i:                                    ; preds = %if.then
    236   call void @_ZNSsC1EPKcmRKSaIcE(%"class.std::basic_string"* %Filename.i, i8* %4, i64 %5, %"class.std::allocator"* dereferenceable(1) %ref.tmp.i.i2.i) #3
    237   br label %_ZNK4llvm9StringRefcvSsEv.exit9.i
    238 
    239 _ZNK4llvm9StringRefcvSsEv.exit9.i:                ; preds = %if.end.i.i8.i, %if.then.i.i6.i
    240   call void @llvm.lifetime.end(i64 1, i8* %10) #3
    241   %LineNo.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 3
    242   store i32 -1, i32* %LineNo.i, align 8, !tbaa !14
    243   %ColumnNo.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 4
    244   store i32 -1, i32* %ColumnNo.i, align 4, !tbaa !21
    245   %Kind.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 5
    246   store i32 0, i32* %Kind.i, align 8, !tbaa !22
    247   %Message.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 6
    248   %12 = getelementptr inbounds %"class.std::allocator", %"class.std::allocator"* %ref.tmp.i.i.i, i64 0, i32 0
    249   call void @llvm.lifetime.start(i64 1, i8* %12) #3
    250   %tobool.i.i.i = icmp eq i8* %8, null
    251   br i1 %tobool.i.i.i, label %if.then.i.i.i, label %if.end.i.i.i
    252 
    253 if.then.i.i.i:                                    ; preds = %_ZNK4llvm9StringRefcvSsEv.exit9.i
    254   %_M_p.i.i.i.i.i.i.i = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %Message.i, i64 0, i32 0, i32 0
    255   store i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*), i8** %_M_p.i.i.i.i.i.i.i, align 8, !tbaa !13
    256   br label %_ZN4llvm12SMDiagnosticC2ENS_9StringRefENS_9SourceMgr8DiagKindES1_.exit
    257 
    258 if.end.i.i.i:                                     ; preds = %_ZNK4llvm9StringRefcvSsEv.exit9.i
    259   call void @_ZNSsC1EPKcmRKSaIcE(%"class.std::basic_string"* %Message.i, i8* %8, i64 %9, %"class.std::allocator"* dereferenceable(1) %ref.tmp.i.i.i) #3
    260   br label %_ZN4llvm12SMDiagnosticC2ENS_9StringRefENS_9SourceMgr8DiagKindES1_.exit
    261 
    262 _ZN4llvm12SMDiagnosticC2ENS_9StringRefENS_9SourceMgr8DiagKindES1_.exit: ; preds = %if.then.i.i.i, %if.end.i.i.i
    263   call void @llvm.lifetime.end(i64 1, i8* %12) #3
    264   %_M_p.i.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 7, i32 0, i32 0
    265   store i8* bitcast (i64* getelementptr inbounds ([0 x i64], [0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE, i64 0, i64 3) to i8*), i8** %_M_p.i.i.i.i.i, align 8, !tbaa !13
    266   %Ranges.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 8
    267   %13 = bitcast %"class.std::vector.79"* %Ranges.i to i8*
    268   call void @llvm.memset.p0i8.i64(i8* %13, i8 0, i64 24, i32 8, i1 false) #3
    269   %14 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i64 0
    270   %BeginX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0, i32 0, i32 0, i32 0, i32 0
    271   store i8* %14, i8** %BeginX.i.i.i.i.i.i, align 8, !tbaa !23
    272   %EndX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0, i32 0, i32 0, i32 0, i32 1
    273   store i8* %14, i8** %EndX.i.i.i.i.i.i, align 8, !tbaa !25
    274   %CapacityX.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0, i32 0, i32 0, i32 0, i32 2
    275   %add.ptr.i.i.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i64 96
    276   store i8* %add.ptr.i.i.i.i.i.i, i8** %CapacityX.i.i.i.i.i.i, align 8, !tbaa !26
    277   %15 = bitcast %"class.llvm::SMDiagnostic"* %Err to i8*
    278   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %11, i64 16, i32 8, i1 false) #3
    279   %Filename.i38 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 2
    280   call void @_ZNSs4swapERSs(%"class.std::basic_string"* %Filename.i38, %"class.std::basic_string"* dereferenceable(8) %Filename.i) #3
    281   %LineNo.i39 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 3
    282   %16 = bitcast i32* %LineNo.i39 to i8*
    283   %17 = bitcast i32* %LineNo.i to i8*
    284   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false) #3
    285   %Message.i40 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 6
    286   call void @_ZNSs4swapERSs(%"class.std::basic_string"* %Message.i40, %"class.std::basic_string"* dereferenceable(8) %Message.i) #3
    287   %LineContents.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 7
    288   %LineContents7.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 7
    289   call void @_ZNSs4swapERSs(%"class.std::basic_string"* %LineContents.i, %"class.std::basic_string"* dereferenceable(8) %LineContents7.i) #3
    290   %Ranges.i41 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 8
    291   %_M_start.i7.i.i.i = getelementptr inbounds %"class.std::vector.79", %"class.std::vector.79"* %Ranges.i41, i64 0, i32 0, i32 0, i32 0
    292   %18 = load %"struct.std::pair"*, %"struct.std::pair"** %_M_start.i7.i.i.i, align 8, !tbaa !27
    293   %_M_finish.i9.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 8, i32 0, i32 0, i32 1
    294   %_M_end_of_storage.i11.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 8, i32 0, i32 0, i32 2
    295   %_M_start2.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 8, i32 0, i32 0, i32 0
    296   %19 = bitcast %"class.std::vector.79"* %Ranges.i41 to i8*
    297   call void @llvm.memset.p0i8.i64(i8* %19, i8 0, i64 16, i32 8, i1 false) #3
    298   %20 = load %"struct.std::pair"*, %"struct.std::pair"** %_M_start2.i.i.i.i, align 8, !tbaa !27
    299   store %"struct.std::pair"* %20, %"struct.std::pair"** %_M_start.i7.i.i.i, align 8, !tbaa !27
    300   store %"struct.std::pair"* null, %"struct.std::pair"** %_M_start2.i.i.i.i, align 8, !tbaa !27
    301   %_M_finish3.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 8, i32 0, i32 0, i32 1
    302   %21 = load %"struct.std::pair"*, %"struct.std::pair"** %_M_finish3.i.i.i.i, align 8, !tbaa !27
    303   store %"struct.std::pair"* %21, %"struct.std::pair"** %_M_finish.i9.i.i.i, align 8, !tbaa !27
    304   store %"struct.std::pair"* null, %"struct.std::pair"** %_M_finish3.i.i.i.i, align 8, !tbaa !27
    305   %_M_end_of_storage4.i.i.i.i = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 8, i32 0, i32 0, i32 2
    306   %22 = load %"struct.std::pair"*, %"struct.std::pair"** %_M_end_of_storage4.i.i.i.i, align 8, !tbaa !27
    307   store %"struct.std::pair"* %22, %"struct.std::pair"** %_M_end_of_storage.i11.i.i.i, align 8, !tbaa !27
    308   store %"struct.std::pair"* null, %"struct.std::pair"** %_M_end_of_storage4.i.i.i.i, align 8, !tbaa !27
    309   %tobool.i.i.i.i.i.i = icmp eq %"struct.std::pair"* %18, null
    310   br i1 %tobool.i.i.i.i.i.i, label %_ZN4llvm12SMDiagnosticaSEOS0_.exit, label %if.then.i.i.i.i.i.i
    311 
    312 if.then.i.i.i.i.i.i:                              ; preds = %_ZN4llvm12SMDiagnosticC2ENS_9StringRefENS_9SourceMgr8DiagKindES1_.exit
    313   %23 = bitcast %"struct.std::pair"* %18 to i8*
    314   call void @_ZdlPv(i8* %23) #3
    315   br label %_ZN4llvm12SMDiagnosticaSEOS0_.exit
    316 
    317 _ZN4llvm12SMDiagnosticaSEOS0_.exit:               ; preds = %_ZN4llvm12SMDiagnosticC2ENS_9StringRefENS_9SourceMgr8DiagKindES1_.exit, %if.then.i.i.i.i.i.i
    318   %24 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %Err, i64 0, i32 9, i32 0
    319   %25 = getelementptr inbounds %"class.llvm::SMDiagnostic", %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 9, i32 0
    320   %call2.i.i42 = call dereferenceable(48) %"class.llvm::SmallVectorImpl.85"* @_ZN4llvm15SmallVectorImplINS_7SMFixItEEaSEOS2_(%"class.llvm::SmallVectorImpl.85"* %24, %"class.llvm::SmallVectorImpl.85"* dereferenceable(48) %25) #3
    321   call void @_ZN4llvm12SMDiagnosticD2Ev(%"class.llvm::SMDiagnostic"* %ref.tmp) #3
    322   %26 = getelementptr inbounds %"class.std::allocator", %"class.std::allocator"* %ref.tmp.i.i, i64 0, i32 0
    323   call void @llvm.lifetime.start(i64 1, i8* %26) #3
    324   %27 = bitcast i8* %arrayidx.i.i.i36 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*
    325   %cmp.i.i.i = icmp eq i8* %arrayidx.i.i.i36, bitcast ([0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*)
    326   br i1 %cmp.i.i.i, label %_ZNSsD1Ev.exit, label %if.then.i.i.i45, !prof !28
    327 
    328 if.then.i.i.i45:                                  ; preds = %_ZN4llvm12SMDiagnosticaSEOS0_.exit
    329   %_M_refcount.i.i.i = getelementptr inbounds i8, i8* %8, i64 -8
    330   %28 = bitcast i8* %_M_refcount.i.i.i to i32*
    331   br i1 icmp ne (i8* bitcast (i32 (i32*, void (i8*)*)* @__pthread_key_create to i8*), i8* null), label %if.then.i.i.i.i, label %if.else.i.i.i.i
    332 
    333 if.then.i.i.i.i:                                  ; preds = %if.then.i.i.i45
    334   %.atomicdst.i.i.i.i.i.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast = bitcast i32* %.atomicdst.i.i.i.i.i to i8*
    335   call void @llvm.lifetime.start(i64 4, i8* %.atomicdst.i.i.i.i.i.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast)
    336   %29 = atomicrmw volatile add i32* %28, i32 -1 acq_rel
    337   store i32 %29, i32* %.atomicdst.i.i.i.i.i, align 4
    338   %.atomicdst.i.i.i.i.i.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..atomicdst.0..atomicdst.0..i.i.i.i.i = load volatile i32, i32* %.atomicdst.i.i.i.i.i, align 4
    339   call void @llvm.lifetime.end(i64 4, i8* %.atomicdst.i.i.i.i.i.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast)
    340   br label %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i
    341 
    342 if.else.i.i.i.i:                                  ; preds = %if.then.i.i.i45
    343   %30 = load i32, i32* %28, align 4, !tbaa !29
    344   %add.i.i.i.i.i = add nsw i32 %30, -1
    345   store i32 %add.i.i.i.i.i, i32* %28, align 4, !tbaa !29
    346   br label %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i
    347 
    348 _ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i: ; preds = %if.else.i.i.i.i, %if.then.i.i.i.i
    349   %retval.0.i.i.i.i = phi i32 [ %.atomicdst.i.i.i.i.i.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..atomicdst.0..atomicdst.0..i.i.i.i.i, %if.then.i.i.i.i ], [ %30, %if.else.i.i.i.i ]
    350   %cmp3.i.i.i = icmp slt i32 %retval.0.i.i.i.i, 1
    351   br i1 %cmp3.i.i.i, label %if.then4.i.i.i, label %_ZNSsD1Ev.exit
    352 
    353 if.then4.i.i.i:                                   ; preds = %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i
    354   call void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %27, %"class.std::allocator"* dereferenceable(1) %ref.tmp.i.i) #3
    355   br label %_ZNSsD1Ev.exit
    356 
    357 _ZNSsD1Ev.exit:                                   ; preds = %_ZN4llvm12SMDiagnosticaSEOS0_.exit, %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i, %if.then4.i.i.i
    358   call void @llvm.lifetime.end(i64 1, i8* %26) #3
    359   %31 = getelementptr inbounds %"class.std::allocator", %"class.std::allocator"* %ref.tmp.i.i47, i64 0, i32 0
    360   call void @llvm.lifetime.start(i64 1, i8* %31) #3
    361   %_M_p.i.i.i.i48 = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %ref.tmp5, i64 0, i32 0, i32 0
    362   %32 = load i8*, i8** %_M_p.i.i.i.i48, align 8, !tbaa !1
    363   %arrayidx.i.i.i49 = getelementptr inbounds i8, i8* %32, i64 -24
    364   %33 = bitcast i8* %arrayidx.i.i.i49 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*
    365   %cmp.i.i.i50 = icmp eq i8* %arrayidx.i.i.i49, bitcast ([0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*)
    366   br i1 %cmp.i.i.i50, label %_ZNSsD1Ev.exit62, label %if.then.i.i.i52, !prof !28
    367 
    368 if.then.i.i.i52:                                  ; preds = %_ZNSsD1Ev.exit
    369   %_M_refcount.i.i.i51 = getelementptr inbounds i8, i8* %32, i64 -8
    370   %34 = bitcast i8* %_M_refcount.i.i.i51 to i32*
    371   br i1 icmp ne (i8* bitcast (i32 (i32*, void (i8*)*)* @__pthread_key_create to i8*), i8* null), label %if.then.i.i.i.i55, label %if.else.i.i.i.i57
    372 
    373 if.then.i.i.i.i55:                                ; preds = %if.then.i.i.i52
    374   %.atomicdst.i.i.i.i.i46.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast = bitcast i32* %.atomicdst.i.i.i.i.i46 to i8*
    375   call void @llvm.lifetime.start(i64 4, i8* %.atomicdst.i.i.i.i.i46.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast)
    376   %35 = atomicrmw volatile add i32* %34, i32 -1 acq_rel
    377   store i32 %35, i32* %.atomicdst.i.i.i.i.i46, align 4
    378   %.atomicdst.i.i.i.i.i46.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..atomicdst.0..atomicdst.0..i.i.i.i.i54 = load volatile i32, i32* %.atomicdst.i.i.i.i.i46, align 4
    379   call void @llvm.lifetime.end(i64 4, i8* %.atomicdst.i.i.i.i.i46.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..sroa_cast)
    380   br label %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i60
    381 
    382 if.else.i.i.i.i57:                                ; preds = %if.then.i.i.i52
    383   %36 = load i32, i32* %34, align 4, !tbaa !29
    384   %add.i.i.i.i.i56 = add nsw i32 %36, -1
    385   store i32 %add.i.i.i.i.i56, i32* %34, align 4, !tbaa !29
    386   br label %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i60
    387 
    388 _ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i60: ; preds = %if.else.i.i.i.i57, %if.then.i.i.i.i55
    389   %retval.0.i.i.i.i58 = phi i32 [ %.atomicdst.i.i.i.i.i46.0..atomicdst.i.i.i.i.0..atomicdst.i.i.i.0..atomicdst.i.i.0..atomicdst.i.0..atomicdst.0..atomicdst.0..i.i.i.i.i54, %if.then.i.i.i.i55 ], [ %36, %if.else.i.i.i.i57 ]
    390   %cmp3.i.i.i59 = icmp slt i32 %retval.0.i.i.i.i58, 1
    391   br i1 %cmp3.i.i.i59, label %if.then4.i.i.i61, label %_ZNSsD1Ev.exit62
    392 
    393 if.then4.i.i.i61:                                 ; preds = %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i60
    394   call void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %33, %"class.std::allocator"* dereferenceable(1) %ref.tmp.i.i47) #3
    395   br label %_ZNSsD1Ev.exit62
    396 
    397 _ZNSsD1Ev.exit62:                                 ; preds = %_ZNSsD1Ev.exit, %_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii.exit.i.i.i60, %if.then4.i.i.i61
    398   call void @llvm.lifetime.end(i64 1, i8* %31) #3
    399   br label %cleanup
    400 
    401 cond.false.i.i:                                   ; preds = %_ZNK4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE8getErrorEv.exit
    402   call void @__assert_fail(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str1, i64 0, i64 0), i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str2, i64 0, i64 0), i32 zeroext 242, i8* getelementptr inbounds ([206 x i8], [206 x i8]* @__PRETTY_FUNCTION__._ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv, i64 0, i64 0)) #7
    403   unreachable
    404 
    405 _ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE3getEv.exit: ; preds = %entry
    406   %_M_head_impl.i.i.i.i.i = bitcast %"class.llvm::ErrorOr"* %FileOrErr to %"class.llvm::MemoryBuffer"**
    407   %37 = load %"class.llvm::MemoryBuffer"*, %"class.llvm::MemoryBuffer"** %_M_head_impl.i.i.i.i.i, align 8, !tbaa !27
    408   %call9 = call %"class.llvm::Module"* @_ZN4llvm7ParseIREPNS_12MemoryBufferERNS_12SMDiagnosticERNS_11LLVMContextE(%"class.llvm::MemoryBuffer"* %37, %"class.llvm::SMDiagnostic"* dereferenceable(200) %Err, %"class.llvm::LLVMContext"* dereferenceable(8) %Context)
    409   br label %cleanup
    410 
    411 cleanup:                                          ; preds = %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE3getEv.exit, %_ZNSsD1Ev.exit62
    412   %retval.0 = phi %"class.llvm::Module"* [ null, %_ZNSsD1Ev.exit62 ], [ %call9, %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE3getEv.exit ]
    413   %bf.load.i = load i8, i8* %HasError.i24, align 8
    414   %38 = and i8 %bf.load.i, 1
    415   %bf.cast.i = icmp eq i8 %38, 0
    416   br i1 %bf.cast.i, label %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv.exit.i, label %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEED2Ev.exit
    417 
    418 _ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv.exit.i: ; preds = %cleanup
    419   %_M_head_impl.i.i.i.i.i.i = bitcast %"class.llvm::ErrorOr"* %FileOrErr to %"class.llvm::MemoryBuffer"**
    420   %39 = load %"class.llvm::MemoryBuffer"*, %"class.llvm::MemoryBuffer"** %_M_head_impl.i.i.i.i.i.i, align 8, !tbaa !27
    421   %cmp.i.i = icmp eq %"class.llvm::MemoryBuffer"* %39, null
    422   br i1 %cmp.i.i, label %_ZNSt10unique_ptrIN4llvm12MemoryBufferESt14default_deleteIS1_EED2Ev.exit.i, label %_ZNKSt14default_deleteIN4llvm12MemoryBufferEEclEPS1_.exit.i.i
    423 
    424 _ZNKSt14default_deleteIN4llvm12MemoryBufferEEclEPS1_.exit.i.i: ; preds = %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv.exit.i
    425   %40 = bitcast %"class.llvm::MemoryBuffer"* %39 to void (%"class.llvm::MemoryBuffer"*)***
    426   %vtable.i.i.i = load void (%"class.llvm::MemoryBuffer"*)**, void (%"class.llvm::MemoryBuffer"*)*** %40, align 8, !tbaa !11
    427   %vfn.i.i.i = getelementptr inbounds void (%"class.llvm::MemoryBuffer"*)*, void (%"class.llvm::MemoryBuffer"*)** %vtable.i.i.i, i64 1
    428   %41 = load void (%"class.llvm::MemoryBuffer"*)*, void (%"class.llvm::MemoryBuffer"*)** %vfn.i.i.i, align 8
    429   call void %41(%"class.llvm::MemoryBuffer"* %39) #3
    430   br label %_ZNSt10unique_ptrIN4llvm12MemoryBufferESt14default_deleteIS1_EED2Ev.exit.i
    431 
    432 _ZNSt10unique_ptrIN4llvm12MemoryBufferESt14default_deleteIS1_EED2Ev.exit.i: ; preds = %_ZNKSt14default_deleteIN4llvm12MemoryBufferEEclEPS1_.exit.i.i, %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE10getStorageEv.exit.i
    433   store %"class.llvm::MemoryBuffer"* null, %"class.llvm::MemoryBuffer"** %_M_head_impl.i.i.i.i.i.i, align 8, !tbaa !27
    434   br label %_ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEED2Ev.exit
    435 
    436 _ZN4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEED2Ev.exit: ; preds = %cleanup, %_ZNSt10unique_ptrIN4llvm12MemoryBufferESt14default_deleteIS1_EED2Ev.exit.i
    437   ret %"class.llvm::Module"* %retval.0
    438 }
    439 
    440 ; Function Attrs: nounwind
    441 declare void @llvm.lifetime.start(i64, i8* nocapture) #3
    442 
    443 ; Function Attrs: nounwind
    444 declare void @llvm.lifetime.end(i64, i8* nocapture) #3
    445 
    446 ; Function Attrs: noreturn nounwind
    447 declare void @__assert_fail(i8*, i8*, i32 zeroext, i8*) #4
    448 
    449 declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6insertEmPKcm(%"class.std::basic_string"*, i64, i8*, i64) #1
    450 
    451 ; Function Attrs: nounwind
    452 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #3
    453 
    454 ; Function Attrs: nounwind
    455 declare void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"class.std::allocator"* dereferenceable(1)) #0
    456 
    457 ; Function Attrs: nounwind
    458 declare extern_weak signext i32 @__pthread_key_create(i32*, void (i8*)*) #0
    459 
    460 ; Function Attrs: nobuiltin nounwind
    461 declare void @_ZdlPv(i8*) #6
    462 
    463 declare void @_ZNSsC1EPKcmRKSaIcE(%"class.std::basic_string"*, i8*, i64, %"class.std::allocator"* dereferenceable(1)) #1
    464 
    465 declare hidden void @_ZN4llvm12SMDiagnosticD2Ev(%"class.llvm::SMDiagnostic"* readonly %this) unnamed_addr #2 align 2
    466 
    467 declare dereferenceable(48) %"class.llvm::SmallVectorImpl.85"* @_ZN4llvm15SmallVectorImplINS_7SMFixItEEaSEOS2_(%"class.llvm::SmallVectorImpl.85"* %this, %"class.llvm::SmallVectorImpl.85"* dereferenceable(48) %RHS) #0 align 2
    468 
    469 declare %"class.llvm::Module"* @_ZN4llvm7ParseIREPNS_12MemoryBufferERNS_12SMDiagnosticERNS_11LLVMContextE(%"class.llvm::MemoryBuffer"* %Buffer, %"class.llvm::SMDiagnostic"* dereferenceable(200) %Err, %"class.llvm::LLVMContext"* dereferenceable(8) %Context) #0
    470 
    471 declare void @_ZNSs4swapERSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) #1
    472 
    473 ; Function Attrs: nounwind
    474 declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #3
    475 
    476 attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    477 attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    478 attributes #2 = { inlinehint nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    479 attributes #3 = { nounwind }
    480 attributes #4 = { noreturn nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    481 attributes #5 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    482 attributes #6 = { nobuiltin nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
    483 attributes #7 = { noreturn nounwind }
    484 
    485 !llvm.ident = !{!0}
    486 
    487 !0 = !{!"clang version 3.6.0 (trunk 215115) (llvm/trunk 215117)"}
    488 !1 = !{!2, !4, i64 0}
    489 !2 = !{!"_ZTSSs", !3, i64 0}
    490 !3 = !{!"_ZTSNSs12_Alloc_hiderE", !4, i64 0}
    491 !4 = !{!"any pointer", !5, i64 0}
    492 !5 = !{!"omnipotent char", !6, i64 0}
    493 !6 = !{!"Simple C/C++ TBAA"}
    494 !7 = !{!8, !9, i64 0}
    495 !8 = !{!"_ZTSNSs9_Rep_baseE", !9, i64 0, !9, i64 8, !10, i64 16}
    496 !9 = !{!"long", !5, i64 0}
    497 !10 = !{!"int", !5, i64 0}
    498 !11 = !{!12, !12, i64 0}
    499 !12 = !{!"vtable pointer", !6, i64 0}
    500 !13 = !{!3, !4, i64 0}
    501 !14 = !{!15, !10, i64 24}
    502 !15 = !{!"_ZTSN4llvm12SMDiagnosticE", !4, i64 0, !16, i64 8, !2, i64 16, !10, i64 24, !10, i64 28, !17, i64 32, !2, i64 40, !2, i64 48, !18, i64 56, !19, i64 80}
    503 !16 = !{!"_ZTSN4llvm5SMLocE", !4, i64 0}
    504 !17 = !{!"_ZTSN4llvm9SourceMgr8DiagKindE", !5, i64 0}
    505 !18 = !{!"_ZTSSt6vectorISt4pairIjjESaIS1_EE"}
    506 !19 = !{!"_ZTSN4llvm11SmallVectorINS_7SMFixItELj4EEE", !20, i64 48}
    507 !20 = !{!"_ZTSN4llvm18SmallVectorStorageINS_7SMFixItELj4EEE", !5, i64 0}
    508 !21 = !{!15, !10, i64 28}
    509 !22 = !{!15, !17, i64 32}
    510 !23 = !{!24, !4, i64 0}
    511 !24 = !{!"_ZTSN4llvm15SmallVectorBaseE", !4, i64 0, !4, i64 8, !4, i64 16}
    512 !25 = !{!24, !4, i64 8}
    513 !26 = !{!24, !4, i64 16}
    514 !27 = !{!4, !4, i64 0}
    515 !28 = !{!"branch_weights", i32 64, i32 4}
    516 !29 = !{!10, !10, i64 0}
    517 !30 = !{!31, !4, i64 8}
    518 !31 = !{!"_ZTSN4llvm12MemoryBufferE", !4, i64 8, !4, i64 16}
    519 !32 = !{!31, !4, i64 16}
    520 !33 = !{!5, !5, i64 0}
    521 !34 = !{!35, !4, i64 0}
    522 !35 = !{!"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", !36, i64 0}
    523 !36 = !{!"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", !4, i64 0, !4, i64 8, !4, i64 16}
    524 !37 = !{!38, !38, i64 0}
    525 !38 = !{!"bool", !5, i64 0}
    526 !39 = !{i8 0, i8 2}
    527 !40 = !{!41, !4, i64 0}
    528 !41 = !{!"_ZTSN4llvm10TimeRegionE", !4, i64 0}
    529 !42 = !{!43, !44, i64 32}
    530 !43 = !{!"_ZTSN4llvm11raw_ostreamE", !4, i64 8, !4, i64 16, !4, i64 24, !44, i64 32}
    531 !44 = !{!"_ZTSN4llvm11raw_ostream10BufferKindE", !5, i64 0}
    532 !45 = !{!43, !4, i64 24}
    533 !46 = !{!43, !4, i64 8}
    534 !47 = !{i64 0, i64 8, !27, i64 8, i64 8, !27}
    535