<div dir="ltr">I have seen some Clang crashes when building files with profile instrumentation. Given the delay in response, I'm going to go ahead and revert the commit. Sorry about that :-( hopefully it will only be temporary.<div><br></div><div><br><div><br></div><div>I've attached a reproducer, which relies on a precompiled module file for libc++. This is the traceback (note that several of the flags are needed for module compatibility, but may also contribute):</div><div><br></div><div><br></div><div>MIParser-7e38ec.creduce.cpp:49:7: warning: class 's' does not declare any constructor to initialize its non-modifiable members<br>class s {<br>      ^<br>MIParser-7e38ec.creduce.cpp:51:6: note: reference member 't' will never be initialized<br>  H &t;<br>     ^<br>MIParser-7e38ec.creduce.cpp:67:1: warning: control may reach end of non-void function<br>}<br>^<br>2 warnings generated.<br>MIParser-7e38ec.creduce.cpp:49:7: warning: class 's' does not declare any constructor to initialize its non-modifiable members<br>class s {<br>      ^<br>MIParser-7e38ec.creduce.cpp:51:6: note: reference member 't' will never be initialized<br>  H &t;<br>     ^<br>MIParser-7e38ec.creduce.cpp:67:1: warning: control may reach end of non-void function<br>}<br>^<br>Stack dump:<br>0.   Program arguments: .../bin/clang -cc1 -triple x86_64-grtev4-linux-gnu -target-cpu x86-64 -target-feature +sse4.2 -target-feature +pclmul -target-feature +aes -fprofile-instrument=llvm -fprofile-instrument-path=/tmp/profraw/blaze-out/default_%m.profraw -O3 -x c++ -std=gnu++17 -stdlib=libc++ -pthread -fno-signed-char -fgnuc-version=4.2.1 -fsized-deallocation -faligned-allocation -fnew-alignment=8 -fmath-errno -fmodules -fno-implicit-modules -fmodule-file=/tmp/MIParser-7e38ec.stl.pcm -emit-obj -o /dev/null MIParser-7e38ec.creduce.cpp <br>1.   <eof> parser at end of file<br>2.   Per-module optimization passes<br>3.      Running pass 'CallGraph Pass Manager' on module 'MIParser-7e38ec.creduce.cpp'.<br>4.      Running pass 'Bit-Tracking Dead Code Elimination' on function '@_ZN1s2akEv'<br> #0 0x000056472aa52e98 llvm::sys::RunSignalHandlers() (.../bin/clang+0x509fe98)<br> #1 0x000056472aa5568b SignalHandler(int) (.../bin/clang+0x50a268b)<br> #2 0x00007f3177e6e9a0 __restore_rt (/usr/grte/v4/lib64/libpthread.so.0+0xf9a0)<br> #3 0x000056472a5b1294 llvm::DemandedBits::performAnalysis() (.../bin/clang+0x4bfe294)<br> #4 0x000056472a5b1e92 llvm::DemandedBits::isInstructionDead(llvm::Instruction*) (.../bin/clang+0x4bfee92)<br> #5 0x000056472a1809da bitTrackingDCE(llvm::Function&, llvm::DemandedBits&) (.../bin/clang+0x47cd9da)<br> #6 0x000056472a8ca60f llvm::FPPassManager::runOnFunction(llvm::Function&) (.../bin/clang+0x4f1760f)<br> #7 0x000056472a59e346 (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) (.../bin/clang+0x4beb346)<br> #8 0x000056472a8cae9f llvm::legacy::PassManagerImpl::run(llvm::Module&) (.../bin/clang+0x4f17e9f)<br> #9 0x00005647278c0c64 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::__u::unique_ptr<llvm::raw_pwrite_stream, std::__u::default_delete<llvm::raw_pwrite_stream> >) (.../bin/clang+0x1f0dc64)<br>#10 0x00005647278bae55 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (.../bin/clang+0x1f07e55)<br>#11 0x0000564728262ad3 clang::ParseAST(clang::Sema&, bool, bool) (.../bin/clang+0x28afad3)<br>#12 0x000056472808e787 clang::FrontendAction::Execute() (.../bin/clang+0x26db787)<br>#13 0x0000564728039010 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (.../bin/clang+0x2686010)<br>#14 0x00005647276249b9 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (.../bin/clang+0x1c719b9)<br>#15 0x0000564727614f38 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (.../bin/clang+0x1c61f38)<br>#16 0x00005647276226ab main (.../bin/clang+0x1c6f6ab)<br>#17 0x00007f3177cdcbbd __libc_start_main (/usr/grte/v4/lib64/libc.so.6+0x38bbd)<br>#18 0x00005647276145e9 _start (.../bin/clang+0x1c615e9)<br>./<a href="http://MIParser-7e38ec.creduce.sh">MIParser-7e38ec.creduce.sh</a>: line 57: 60350 Segmentation fault      ${CLANG} "${ARGS[@]}" $*<br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 14, 2019 at 7:46 AM Alexander Kornienko via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>I'm seeing an assertion failure when compiling llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp that started happening after this patch (I verified that reverting it fixes the crash). Please fix or revert the commit. </div><div><br></div><div><div>I don't have an isolated test case, but maybe there's an obvious error that you can spot given the stack trace:</div><div></div></div><div><br></div><div>assert.h assertion failed at llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:543 in void (anonymous namespace)::PromoteMem2Reg::run(): isAllocaPromotable(AI) && "Cannot promote non-promotable alloca!" </div><div><br></div><div> #0 0x00005556fa034751 llvm::sys::PrintStackTrace(llvm::raw_ostream&) llvm/lib/Support/Unix/Signals.inc:537:11<br> #1 0x00005556fa034be9 PrintStackTraceSignalHandler(void*) llvm/lib/Support/Unix/Signals.inc:593:1<br> #2 0x00005556fa03327b llvm::sys::RunSignalHandlers() llvm/lib/Support/Signals.cpp:67:5<br> #3 0x00005556fa035244 SignalHandler(int) llvm/lib/Support/Unix/Signals.inc:384:1<br>...<br>#12 0x00005556fa1adfa0 __assert_fail<br>#13 0x00005556f94d3703 (anonymous namespace)::PromoteMem2Reg::run() llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:543:5<br>#14 0x00005556f94d342a llvm::PromoteMemToReg(llvm::ArrayRef<llvm::AllocaInst*>, llvm::DominatorTree&, llvm::AssumptionCache*) llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1006:3                                                                                                                                                                                                              <br>#15 0x00005556f9157021 llvm::SROA::promoteAllocas(llvm::Function&) llvm/lib/Transforms/Scalar/SROA.cpp:4559:3<br>#16 0x00005556f91573cc llvm::SROA::runImpl(llvm::Function&, llvm::DominatorTree&, llvm::AssumptionCache&) llvm/lib/Transforms/Scalar/SROA.cpp:4600:16<br>#17 0x00005556f9157682 llvm::SROA::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/lib/Transforms/Scalar/SROA.cpp:4616:10<br>#18 0x00005556f42bfc35 llvm::detail::PassModel<llvm::Function, llvm::SROA, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManagerInternal.h:79:17                                                                                                                                              <br>#19 0x00005556f9d5f539 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) llvm/include/llvm/IR/PassManager.h:519:33                                                                                                                                                                                                <br>#20 0x00005556f42d8e4f llvm::CGSCCToFunctionPassAdaptor<llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> > >::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) llvm/include/llvm/Analysis/CGSCCPassManager.h:489:39                                                        <br>#21 0x00005556f42d8bb5 llvm::detail::PassModel<llvm::LazyCallGraph::SCC, llvm::CGSCCToFunctionPassAdaptor<llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> > >, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) llvm/include/llvm/IR/PassManagerInternal.h:79:17<br>#22 0x00005556f95f734a llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&>::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) llvm/lib/Analysis/CGSCCPassManager.cpp:81:9          <br>#23 0x00005556f42ee416 llvm::DevirtSCCRepeatedPass<llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&> >::run(llvm::LazyCallGraph::SCC&, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>&, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&) llvm/include/llvm/Analysis/CGSCCPassManager.h:617:11<br>#24 0x00005556f42ede49 llvm::ModuleToPostOrderCGSCCPassAdaptor<llvm::DevirtSCCRepeatedPass<llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&> > >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/Analysis/CGSCCPassManager.h:865:18                        <br>#25 0x00005556f42ed735 llvm::detail::PassModel<llvm::Module, llvm::ModuleToPostOrderCGSCCPassAdaptor<llvm::DevirtSCCRepeatedPass<llvm::PassManager<llvm::LazyCallGraph::SCC, llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>, llvm::LazyCallGraph&, llvm::CGSCCUpdateResult&> > >, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerInternal.h:79:17<br>#26 0x00005556f9d5e726 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManager.h:519:33                                                                                                                                                                                                        <br>#27 0x00005556f42fe5f5 llvm::detail::PassModel<llvm::Module, llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManagerInternal.h:79:17                                                                                          <br>#28 0x00005556f9d5e726 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) llvm/include/llvm/IR/PassManager.h:519:33                                                                                                                                                                                                        <br>#29 0x00005556f3ad4791 (anonymous namespace)::EmitAssemblyHelper::EmitAssemblyWithNewPassManager(clang::BackendAction, std::__u::unique_ptr<llvm::raw_pwrite_stream, std::__u::default_delete<llvm::raw_pwrite_stream> >) llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:1324:5                                                                                                                          <br>#30 0x00005556f3ad173e clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::__u::unique_ptr<llvm::raw_pwrite_stream, std::__u::default_delete<llvm::raw_pwrite_stream> >) llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:1543:5<br>#31 0x00005556f3ac726c clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:307:7<br>#32 0x00005556f5017623 clang::ParseAST(clang::Sema&, bool, bool) llvm/tools/clang/lib/Parse/ParseAST.cpp:178:12<br>#33 0x00005556f4d1fae2 clang::ASTFrontendAction::ExecuteAction() llvm/tools/clang/lib/Frontend/FrontendAction.cpp:1044:1<br>#34 0x00005556f3ac353b clang::CodeGenAction::ExecuteAction() llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:1089:1<br>#35 0x00005556f4d1f4b8 clang::FrontendAction::Execute() llvm/tools/clang/lib/Frontend/FrontendAction.cpp:939:7<br>#36 0x00005556f4cc16f0 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:957:23<br>#37 0x00005556f2f7dfc0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:290:8<br>#38 0x00005556f2f5250c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) llvm/tools/clang/tools/driver/cc1_main.cpp:250:13<br>#39 0x00005556f2f76e5f ExecuteCC1Tool(llvm::ArrayRef<char const*>, llvm::StringRef) llvm/tools/clang/tools/driver/driver.cpp:309:5<br>#40 0x00005556f2f761f9 main llvm/tools/clang/tools/driver/driver.cpp:382:5<br><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Oct 13, 2019 at 4:18 AM Johannes Doerfert via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: jdoerfert<br>
Date: Sat Oct 12 19:21:23 2019<br>
New Revision: 374692<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=374692&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=374692&view=rev</a><br>
Log:<br>
[SROA] Reuse existing lifetime markers if possible<br>
<br>
Summary:<br>
If the underlying alloca did not change, we do not necessarily need new<br>
lifetime markers. This patch adds a check and reuses the old ones if<br>
possible.<br>
<br>
Reviewers: reames, ssarda, t.p.northover, hfinkel<br>
<br>
Subscribers: hiraditya, bollu, llvm-commits<br>
<br>
Tags: #llvm<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D68900" rel="noreferrer" target="_blank">https://reviews.llvm.org/D68900</a><br>
<br>
Added:<br>
    llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll<br>
Modified:<br>
    llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=374692&r1=374691&r2=374692&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=374692&r1=374691&r2=374692&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Sat Oct 12 19:21:23 2019<br>
@@ -3072,6 +3072,13 @@ private:<br>
     LLVM_DEBUG(dbgs() << "    original: " << II << "\n");<br>
     assert(II.getArgOperand(1) == OldPtr);<br>
<br>
+    bool EntireRange = (NewBeginOffset == NewAllocaBeginOffset &&<br>
+                        NewEndOffset == NewAllocaEndOffset);<br>
+<br>
+    // If the new lifetime marker would not differ from the old, just keep it.<br>
+    if (&OldAI == &NewAI && EntireRange)<br>
+      return true;<br>
+<br>
     // Record this instruction for deletion.<br>
     Pass.DeadInsts.insert(&II);<br>
<br>
@@ -3082,8 +3089,7 @@ private:<br>
     // promoted, but PromoteMemToReg doesn't handle that case.)<br>
     // FIXME: Check whether the alloca is promotable before dropping the<br>
     // lifetime intrinsics?<br>
-    if (NewBeginOffset != NewAllocaBeginOffset ||<br>
-        NewEndOffset != NewAllocaEndOffset)<br>
+    if (!EntireRange)<br>
       return true;<br>
<br>
     ConstantInt *Size =<br>
<br>
Added: llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll?rev=374692&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll?rev=374692&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll (added)<br>
+++ llvm/trunk/test/Transforms/SROA/reuse_lifetime_markers.ll Sat Oct 12 19:21:23 2019<br>
@@ -0,0 +1,69 @@<br>
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py<br>
+; RUN: opt < %s -sroa -S | FileCheck %s<br>
+;<br>
+; Make sure we reuse the lifetime marker and do not create a new one that looks the same but without the call site attributes.<br>
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"<br>
+<br>
+; Function Attrs: argmemonly nounwind willreturn<br>
+declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #0<br>
+<br>
+; Function Attrs: argmemonly nounwind willreturn<br>
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0<br>
+<br>
+define hidden void @old_markers() {<br>
+;<br>
+; CHECK-LABEL: define {{[^@]+}}@old_markers(<br>
+; CHECK-NEXT:  entry:<br>
+; CHECK-NEXT:    [[VV_SROA_4:%.*]] = alloca [3 x i32*]<br>
+; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST61:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8*<br>
+; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST94:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8*<br>
+; CHECK-NEXT:    call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST94]])<br>
+; CHECK-NEXT:    br i1 undef, label [[DO_BODY:%.*]], label [[IF_END31:%.*]]<br>
+; CHECK:       do.body:<br>
+; CHECK-NEXT:    ret void<br>
+; CHECK:       if.end31:<br>
+; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST61]], i8* noalias nonnull align 8 undef, i64 24, i1 false)<br>
+; CHECK-NEXT:    unreachable<br>
+;<br>
+entry:<br>
+  %vv.sroa.4 = alloca [3 x i32*]<br>
+  %vv.sroa.4.0..sroa_cast61 = bitcast [3 x i32*]* %vv.sroa.4 to i8*<br>
+  %vv.sroa.4.0..sroa_cast94 = bitcast [3 x i32*]* %vv.sroa.4 to i8*<br>
+  call void @llvm.lifetime.start.p0i8(i64 24, i8* nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast94)<br>
+  br i1 undef, label %do.body, label %if.end31<br>
+<br>
+do.body:                                          ; preds = %entry<br>
+  ret void<br>
+<br>
+if.end31:                                         ; preds = %entry<br>
+  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast61, i8* noalias nonnull align 8 undef, i64 24, i1 false)<br>
+  unreachable<br>
+}<br>
+<br>
+define hidden void @new_markers() {<br>
+;<br>
+; CHECK-LABEL: define {{[^@]+}}@new_markers(<br>
+; CHECK-NEXT:  entry:<br>
+; CHECK-NEXT:    [[VV_SROA_4:%.*]] = alloca [3 x i32*]<br>
+; CHECK-NEXT:    [[VV_SROA_4_0__SROA_CAST61:%.*]] = bitcast [3 x i32*]* [[VV_SROA_4]] to i8*<br>
+; CHECK-NEXT:    br i1 undef, label [[DO_BODY:%.*]], label [[IF_END31:%.*]]<br>
+; CHECK:       do.body:<br>
+; CHECK-NEXT:    ret void<br>
+; CHECK:       if.end31:<br>
+; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) [[VV_SROA_4_0__SROA_CAST61]], i8* noalias nonnull align 8 undef, i64 24, i1 false)<br>
+; CHECK-NEXT:    unreachable<br>
+;<br>
+entry:<br>
+  %vv.sroa.4 = alloca [3 x i32*]<br>
+  %vv.sroa.4.0..sroa_cast61 = bitcast [3 x i32*]* %vv.sroa.4 to i8*<br>
+  %vv.sroa.4.0..sroa_cast94 = bitcast [3 x i32*]* %vv.sroa.4 to i8*<br>
+  call void @llvm.lifetime.start.p0i8(i64 8, i8* nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast94)<br>
+  br i1 undef, label %do.body, label %if.end31<br>
+<br>
+do.body:                                          ; preds = %entry<br>
+  ret void<br>
+<br>
+if.end31:                                         ; preds = %entry<br>
+  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nonnull align 8 dereferenceable(24) %vv.sroa.4.0..sroa_cast61, i8* noalias nonnull align 8 undef, i64 24, i1 false)<br>
+  unreachable<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>