<div dir="ltr">Hi Dan,<div><br></div><div>This causes <a href="https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/gcc.c-torture/execute/20030916-1.c">this test program</a> to fail as follows:</div><div><pre style="font-family:'Courier New',courier,monotype,monospace;color:rgb(0,0,0);font-size:10px;font-weight:bold"><span class="" style="font-family:'Courier New',courier,monotype;font-size:16px;font-weight:normal">FAILED 20030916-1.c
clang-3.9: /b/build/slave/linux/build/src/src/work/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp:302: unsigned int llvm::InstrEmitter::getVR(llvm::SDValue, DenseMap<llvm::SDValue, unsigned int> &): Assertion `I != VRBaseMap.end() && "Node emitted out of order - late"' failed.
0  <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af8130c78 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af81313e7
2  libpthread.so.0   0x00007f4af7561340
3  libc.so.6         0x00007f4af6789cc9 gsignal + 57
4  libc.so.6         0x00007f4af678d0d8 abort + 328
5  libc.so.6         0x00007f4af6782b86
6  libc.so.6         0x00007f4af6782c32
7  <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af85e02fa
8  <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af85e3ce3
9  <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af86855c8 llvm::ScheduleDAGSDNodes::EmitSchedule(llvm::MachineBasicBlock::bundle_iterator<llvm::MachineInstr, llvm::ilist_iterator<llvm::MachineInstr> >&) + 1368
10 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af87194ee llvm::SelectionDAGISel::CodeGenAndEmitDAG() + 4942
11 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af8717a87 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) + 7175
12 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af8714a96 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) + 2054
13 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af8414b59 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 153
14 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af82a7f84 llvm::FPPassManager::runOnFunction(llvm::Function&) + 564
15 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af82a81cb llvm::FPPassManager::runOnModule(llvm::Module&) + 43
16 <a href="http://libLLVM-3.9svn.so">libLLVM-3.9svn.so</a> 0x00007f4af82a8695 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 869
17 clang-3.9         0x00000000005a66ad clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::raw_pwrite_stream*) + 9677
18 clang-3.9         0x00000000009f67f8
19 clang-3.9         0x0000000000c16f56 clang::ParseAST(clang::Sema&, bool, bool) + 598
20 clang-3.9         0x000000000095bde5 clang::FrontendAction::Execute() + 69
21 clang-3.9         0x0000000000923f81 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 1153
22 clang-3.9         0x00000000009f2aee clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 3086
23 clang-3.9         0x00000000005637ac cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 1036
24 clang-3.9         0x00000000005623cf main + 12559
25 libc.so.6         0x00007f4af6774ec5 __libc_start_main + 245
26 clang-3.9         0x000000000055f1bb
Stack dump:</span></pre></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 19, 2016 at 6:49 AM, Dan Gohman via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djg<br>
Date: Tue Jan 19 08:49:23 2016<br>
New Revision: 258125<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=258125&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=258125&view=rev</a><br>
Log:<br>
[WebAssembly] Re-enable loop idiom recognition for memcpy et al.<br>
<br>
Removed:<br>
    llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll<br>
Modified:<br>
    llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp<br>
<br>
Modified: llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp?rev=258125&r1=258124&r2=258125&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp?rev=258125&r1=258124&r2=258125&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp (original)<br>
+++ llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp Tue Jan 19 08:49:23 2016<br>
@@ -70,9 +70,7 @@ static void initialize(TargetLibraryInfo<br>
   // There are no library implementations of mempcy and memset for AMD gpus and<br>
   // these can be difficult to lower in the backend.<br>
   if (T.getArch() == Triple::r600 ||<br>
-      T.getArch() == Triple::amdgcn ||<br>
-      T.getArch() == Triple::wasm32 ||<br>
-      T.getArch() == Triple::wasm64) {<br>
+      T.getArch() == Triple::amdgcn) {<br>
     TLI.setUnavailable(LibFunc::memcpy);<br>
     TLI.setUnavailable(LibFunc::memset);<br>
     TLI.setUnavailable(LibFunc::memset_pattern16);<br>
<br>
Removed: llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll?rev=258124&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll?rev=258124&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll (original)<br>
+++ llvm/trunk/test/CodeGen/WebAssembly/loop-idiom.ll (removed)<br>
@@ -1,53 +0,0 @@<br>
-; RUN: opt -loop-idiom -S < %s -march=wasm32 | FileCheck %s<br>
-<br>
-target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"<br>
-target triple = "wasm32-unknown-unknown"<br>
-<br>
-<br>
-; Make sure loop-idiom doesn't create memcpy or memset. These aren't well<br>
-; supported in WebAssembly for now.<br>
-;<br>
-; TODO Check the patterns are recognized once memcpy / memset are supported.<br>
-<br>
-; CHECK-LABEL: @cpy(<br>
-; CHECK-NOT: llvm.memcpy<br>
-; CHECK: load<br>
-; CHECK: store<br>
-define void @cpy(i64 %Size) {<br>
-bb.nph:<br>
-  %Base = alloca i8, i32 10000<br>
-  %Dest = alloca i8, i32 10000<br>
-  br label %for.body<br>
-<br>
-for.body:<br>
-  %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %for.body ]<br>
-  %I.0.014 = getelementptr i8, i8* %Base, i64 %indvar<br>
-  %DestI = getelementptr i8, i8* %Dest, i64 %indvar<br>
-  %V = load i8, i8* %I.0.014, align 1<br>
-  store i8 %V, i8* %DestI, align 1<br>
-  %indvar.next = add i64 %indvar, 1<br>
-  %exitcond = icmp eq i64 %indvar.next, %Size<br>
-  br i1 %exitcond, label %for.end, label %for.body<br>
-<br>
-for.end:<br>
-  ret void<br>
-}<br>
-<br>
-; CHECK-LABEL: @set(<br>
-; CHECK-NOT: llvm.memset<br>
-; CHECK: store<br>
-define void @set(i8* %Base, i64 %Size) {<br>
-bb.nph:<br>
-  br label %for.body<br>
-<br>
-for.body:<br>
-  %indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %for.body ]<br>
-  %I.0.014 = getelementptr i8, i8* %Base, i64 %indvar<br>
-  store i8 0, i8* %I.0.014, align 1<br>
-  %indvar.next = add i64 %indvar, 1<br>
-  %exitcond = icmp eq i64 %indvar.next, %Size<br>
-  br i1 %exitcond, label %for.end, label %for.body<br>
-<br>
-for.end:<br>
-  ret void<br>
-}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>