1; RUN: llc < %s | FileCheck %s 2target datalayout = "e-m:e-i64:64-n32:64" 3target 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 157declare void @_ZN4llvm12MemoryBuffer14getFileOrSTDINENS_9StringRefEl(%"class.llvm::ErrorOr"* sret, [2 x i64], i64) #1 158 159declare void @_ZN4llvm16NamedRegionTimerC1ENS_9StringRefES1_b(%"struct.llvm::NamedRegionTimer"*, [2 x i64], [2 x i64], i1 zeroext) #1 160 161; Function Attrs: nounwind 162define %"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 { 163entry: 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"* %Filename, i64 0, i32 0, i32 0 180 %0 = load 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* %0, i64 -24 183 %_M_length.i.i = bitcast i8* %arrayidx.i.i.i to i64* 184 %2 = load 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"* %FileOrErr, i64 0, i32 1 189 %bf.load.i25 = load 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* %retval.sroa.0.0..sroa_cast.i, align 8 197 %retval.sroa.3.0..sroa_idx.i = getelementptr inbounds %"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* %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 204if.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** %_M_p.i.i.i, align 8, !tbaa !1 207 %arrayidx.i.i.i30 = getelementptr inbounds i8* %4, i64 -24 208 %_M_length.i.i31 = bitcast i8* %arrayidx.i.i.i30 to i64* 209 %5 = load 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)*** %6, align 8, !tbaa !11 212 %vfn.i = getelementptr inbounds 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)** %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]* @.str, i64 0, i64 0), i64 27) #3 216 %_M_p2.i.i.i.i = getelementptr inbounds %"class.std::basic_string"* %call2.i.i, i64 0, i32 0, i32 0 217 %8 = load i8** %_M_p2.i.i.i.i, align 8, !tbaa !13 218 store i8* bitcast (i64* getelementptr inbounds ([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* %8, i64 -24 220 %_M_length.i.i37 = bitcast i8* %arrayidx.i.i.i36 to i64* 221 %9 = load i64* %_M_length.i.i37, align 8, !tbaa !7 222 %Filename.i = getelementptr inbounds %"class.llvm::SMDiagnostic"* %ref.tmp, i64 0, i32 2 223 %10 = getelementptr inbounds %"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 230if.then.i.i6.i: ; preds = %if.then 231 %_M_p.i.i.i.i.i.i5.i = getelementptr inbounds %"class.std::basic_string"* %Filename.i, i64 0, i32 0, i32 0 232 store i8* bitcast (i64* getelementptr inbounds ([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 235if.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"* %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"* %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"* %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"* %ref.tmp, i64 0, i32 6 248 %12 = getelementptr inbounds %"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 253if.then.i.i.i: ; preds = %_ZNK4llvm9StringRefcvSsEv.exit9.i 254 %_M_p.i.i.i.i.i.i.i = getelementptr inbounds %"class.std::basic_string"* %Message.i, i64 0, i32 0, i32 0 255 store i8* bitcast (i64* getelementptr inbounds ([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 258if.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"* %ref.tmp, i64 0, i32 7, i32 0, i32 0 265 store i8* bitcast (i64* getelementptr inbounds ([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"* %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"* %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"* %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"* %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"* %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"* %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"* %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"* %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"* %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"* %Err, i64 0, i32 7 288 %LineContents7.i = getelementptr inbounds %"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"* %Err, i64 0, i32 8 291 %_M_start.i7.i.i.i = getelementptr inbounds %"class.std::vector.79"* %Ranges.i41, i64 0, i32 0, i32 0, i32 0 292 %18 = load %"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"* %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"* %Err, i64 0, i32 8, i32 0, i32 0, i32 2 295 %_M_start2.i.i.i.i = getelementptr inbounds %"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"** %_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"* %ref.tmp, i64 0, i32 8, i32 0, i32 0, i32 1 302 %21 = load %"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"* %ref.tmp, i64 0, i32 8, i32 0, i32 0, i32 2 306 %22 = load %"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 312if.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"* %Err, i64 0, i32 9, i32 0 319 %25 = getelementptr inbounds %"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"* %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 328if.then.i.i.i45: ; preds = %_ZN4llvm12SMDiagnosticaSEOS0_.exit 329 %_M_refcount.i.i.i = getelementptr inbounds 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 333if.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* %.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 342if.else.i.i.i.i: ; preds = %if.then.i.i.i45 343 %30 = load 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 353if.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"* %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"* %ref.tmp5, i64 0, i32 0, i32 0 362 %32 = load i8** %_M_p.i.i.i.i48, align 8, !tbaa !1 363 %arrayidx.i.i.i49 = getelementptr inbounds 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 368if.then.i.i.i52: ; preds = %_ZNSsD1Ev.exit 369 %_M_refcount.i.i.i51 = getelementptr inbounds 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 373if.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* %.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 382if.else.i.i.i.i57: ; preds = %if.then.i.i.i52 383 %36 = load 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 393if.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 401cond.false.i.i: ; preds = %_ZNK4llvm7ErrorOrISt10unique_ptrINS_12MemoryBufferESt14default_deleteIS2_EEE8getErrorEv.exit 402 call void @__assert_fail(i8* getelementptr inbounds ([54 x i8]* @.str1, i64 0, i64 0), i8* getelementptr inbounds ([61 x i8]* @.str2, i64 0, i64 0), i32 zeroext 242, i8* getelementptr inbounds ([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"** %_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 411cleanup: ; 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* %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"** %_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"*)*** %40, align 8, !tbaa !11 427 %vfn.i.i.i = getelementptr inbounds void (%"class.llvm::MemoryBuffer"*)** %vtable.i.i.i, i64 1 428 %41 = load 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 441declare void @llvm.lifetime.start(i64, i8* nocapture) #3 442 443; Function Attrs: nounwind 444declare void @llvm.lifetime.end(i64, i8* nocapture) #3 445 446; Function Attrs: noreturn nounwind 447declare void @__assert_fail(i8*, i8*, i32 zeroext, i8*) #4 448 449declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6insertEmPKcm(%"class.std::basic_string"*, i64, i8*, i64) #1 450 451; Function Attrs: nounwind 452declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #3 453 454; Function Attrs: nounwind 455declare 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 458declare extern_weak signext i32 @__pthread_key_create(i32*, void (i8*)*) #0 459 460; Function Attrs: nobuiltin nounwind 461declare void @_ZdlPv(i8*) #6 462 463declare void @_ZNSsC1EPKcmRKSaIcE(%"class.std::basic_string"*, i8*, i64, %"class.std::allocator"* dereferenceable(1)) #1 464 465declare hidden void @_ZN4llvm12SMDiagnosticD2Ev(%"class.llvm::SMDiagnostic"* readonly %this) unnamed_addr #2 align 2 466 467declare dereferenceable(48) %"class.llvm::SmallVectorImpl.85"* @_ZN4llvm15SmallVectorImplINS_7SMFixItEEaSEOS2_(%"class.llvm::SmallVectorImpl.85"* %this, %"class.llvm::SmallVectorImpl.85"* dereferenceable(48) %RHS) #0 align 2 468 469declare %"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 471declare void @_ZNSs4swapERSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) #1 472 473; Function Attrs: nounwind 474declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #3 475 476attributes #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" } 477attributes #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" } 478attributes #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" } 479attributes #3 = { nounwind } 480attributes #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" } 481attributes #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" } 482attributes #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" } 483attributes #7 = { noreturn nounwind } 484 485!llvm.ident = !{!0} 486 487!0 = metadata !{metadata !"clang version 3.6.0 (trunk 215115) (llvm/trunk 215117)"} 488!1 = metadata !{metadata !2, metadata !4, i64 0} 489!2 = metadata !{metadata !"_ZTSSs", metadata !3, i64 0} 490!3 = metadata !{metadata !"_ZTSNSs12_Alloc_hiderE", metadata !4, i64 0} 491!4 = metadata !{metadata !"any pointer", metadata !5, i64 0} 492!5 = metadata !{metadata !"omnipotent char", metadata !6, i64 0} 493!6 = metadata !{metadata !"Simple C/C++ TBAA"} 494!7 = metadata !{metadata !8, metadata !9, i64 0} 495!8 = metadata !{metadata !"_ZTSNSs9_Rep_baseE", metadata !9, i64 0, metadata !9, i64 8, metadata !10, i64 16} 496!9 = metadata !{metadata !"long", metadata !5, i64 0} 497!10 = metadata !{metadata !"int", metadata !5, i64 0} 498!11 = metadata !{metadata !12, metadata !12, i64 0} 499!12 = metadata !{metadata !"vtable pointer", metadata !6, i64 0} 500!13 = metadata !{metadata !3, metadata !4, i64 0} 501!14 = metadata !{metadata !15, metadata !10, i64 24} 502!15 = metadata !{metadata !"_ZTSN4llvm12SMDiagnosticE", metadata !4, i64 0, metadata !16, i64 8, metadata !2, i64 16, metadata !10, i64 24, metadata !10, i64 28, metadata !17, i64 32, metadata !2, i64 40, metadata !2, i64 48, metadata !18, i64 56, metadata !19, i64 80} 503!16 = metadata !{metadata !"_ZTSN4llvm5SMLocE", metadata !4, i64 0} 504!17 = metadata !{metadata !"_ZTSN4llvm9SourceMgr8DiagKindE", metadata !5, i64 0} 505!18 = metadata !{metadata !"_ZTSSt6vectorISt4pairIjjESaIS1_EE"} 506!19 = metadata !{metadata !"_ZTSN4llvm11SmallVectorINS_7SMFixItELj4EEE", metadata !20, i64 48} 507!20 = metadata !{metadata !"_ZTSN4llvm18SmallVectorStorageINS_7SMFixItELj4EEE", metadata !5, i64 0} 508!21 = metadata !{metadata !15, metadata !10, i64 28} 509!22 = metadata !{metadata !15, metadata !17, i64 32} 510!23 = metadata !{metadata !24, metadata !4, i64 0} 511!24 = metadata !{metadata !"_ZTSN4llvm15SmallVectorBaseE", metadata !4, i64 0, metadata !4, i64 8, metadata !4, i64 16} 512!25 = metadata !{metadata !24, metadata !4, i64 8} 513!26 = metadata !{metadata !24, metadata !4, i64 16} 514!27 = metadata !{metadata !4, metadata !4, i64 0} 515!28 = metadata !{metadata !"branch_weights", i32 64, i32 4} 516!29 = metadata !{metadata !10, metadata !10, i64 0} 517!30 = metadata !{metadata !31, metadata !4, i64 8} 518!31 = metadata !{metadata !"_ZTSN4llvm12MemoryBufferE", metadata !4, i64 8, metadata !4, i64 16} 519!32 = metadata !{metadata !31, metadata !4, i64 16} 520!33 = metadata !{metadata !5, metadata !5, i64 0} 521!34 = metadata !{metadata !35, metadata !4, i64 0} 522!35 = metadata !{metadata !"_ZTSSt12_Vector_baseISt4pairIjjESaIS1_EE", metadata !36, i64 0} 523!36 = metadata !{metadata !"_ZTSNSt12_Vector_baseISt4pairIjjESaIS1_EE12_Vector_implE", metadata !4, i64 0, metadata !4, i64 8, metadata !4, i64 16} 524!37 = metadata !{metadata !38, metadata !38, i64 0} 525!38 = metadata !{metadata !"bool", metadata !5, i64 0} 526!39 = metadata !{i8 0, i8 2} 527!40 = metadata !{metadata !41, metadata !4, i64 0} 528!41 = metadata !{metadata !"_ZTSN4llvm10TimeRegionE", metadata !4, i64 0} 529!42 = metadata !{metadata !43, metadata !44, i64 32} 530!43 = metadata !{metadata !"_ZTSN4llvm11raw_ostreamE", metadata !4, i64 8, metadata !4, i64 16, metadata !4, i64 24, metadata !44, i64 32} 531!44 = metadata !{metadata !"_ZTSN4llvm11raw_ostream10BufferKindE", metadata !5, i64 0} 532!45 = metadata !{metadata !43, metadata !4, i64 24} 533!46 = metadata !{metadata !43, metadata !4, i64 8} 534!47 = metadata !{i64 0, i64 8, metadata !27, i64 8, i64 8, metadata !27} 535