<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri, sans-serif" size="2">
<div>We were successful in upgrading our JIT project to LLVM 3.0rc4 last week, after initially struggling with the various usage and IR changes from V2.9.   But we have some follow-up questions:</div>
<div> </div>
<ol style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; ">
<li>In spite of building and running our tests cleanly with DEBUG+ASSERTS and RELEASE builds, we consistently see a crash when we use a DEBUG build without ASSERTs.  The crash appears whenever we use the new cmpxchg operator in a tight loop (as it would normally
be used).   I don’t understand how this can happen.  The only obvious explanations for this are deliberate behavior differences for the build modes, or some kind of handler that recovers from assertion failures.  I’ve captured the IR from an intermediate dump
successfully compiled it with “llc” frequently, using a wide variety of options attempting to match our usage, but it never fails, and always generates reasonable code.  Is anyone interested in having us attempt to pursue this behavior to track down the problem? 
Here’s a typical crash signature:</li></ol>
<div> </div>
<div><font face="Calibri, sans-serif" color="#1F497D">#0  0x00007ffff602aa69 in RemoveFromUseList (this=0x696a58)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/VMCore/Value.cpp:493</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#1  0x00007ffff54864d5 in ~ValueHandleBase (this=0x689648, </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/Support/ValueHandle.h:74</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#2  ~AssertingVH (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/Support/ValueHandle.h:182</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#3  _Destroy<llvm::AssertingVH<llvm::Instruction> > (this=0x689648, </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /usr/include/c++/4.5/bits/stl_construct.h:89</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#4  __destroy<llvm::AssertingVH<llvm::Instruction>*> (this=0x689648, </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /usr/include/c++/4.5/bits/stl_construct.h:99</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#5  _Destroy<llvm::AssertingVH<llvm::Instruction>*> (this=0x689648, </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /usr/include/c++/4.5/bits/stl_construct.h:122</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#6  _Destroy<llvm::AssertingVH<llvm::Instruction>*, llvm::AssertingVH<llvm::Instruction> > (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /usr/include/c++/4.5/bits/stl_construct.h:148</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#7  ~vector (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /usr/include/c++/4.5/bits/stl_vector.h:313</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#8  ~AliasSet (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/Analysis/AliasSetTracker.h:36</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#9  deleteNode (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/ADT/ilist.h:112</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#10 erase (this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/ADT/ilist.h:463</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#11 llvm::iplist<llvm::AliasSet, llvm::ilist_traits<llvm::AliasSet> >::erase (</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    this=0x689648, first=<value optimized out>, last=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/cl-install/include/llvm/ADT/ilist.h:528</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#12 0x00007ffff5ba926e in clear (this=0x689648)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/include/llvm/ADT/ilist.h:532</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#13 0x00007ffff5d60748 in clear (this=0x689640)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Analysis/AliasSetTracker.cpp:208</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#14 0x00007ffff5486ef6 in llvm::AliasSetTracker::~AliasSetTracker() ()</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">   from ../Code_Gen/Debug/libdt_compile.so</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#15 0x00007ffff5ba5779 in runOnLoop (this=0x677a20, L=0x684aa0, LPM=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">---Type <return> to continue, or q <return> to quit---</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Transforms/Scalar/LICM.cpp:263</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#16 0x00007ffff5dd6791 in runOnFunction (this=0x68be80, F=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Analysis/LoopPass.cpp:241</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#17 0x00007ffff6008881 in runOnFunction (this=0x691630, F=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/VMCore/PassManager.cpp:1512</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#18 0x00007ffff5d43a11 in RunPassOnSCC (this=0x695e10, P=0x691630, CurSCC=..., CG=..., </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    CallGraphUpToDate=@0x7fff73a6338e, DevirtualizedCall=@0x7fff73a63453)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Analysis/IPA/CallGraphSCCPass.cpp:145</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#19 0x00007ffff5d43392 in RunAllPassesOnSCC (this=0x695e10, CurSCC=..., CG=..., </font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    DevirtualizedCall=@0x7fff73a63453)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Analysis/IPA/CallGraphSCCPass.cpp:399</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#20 0x00007ffff5d42d94 in runOnModule (this=0x695e10, M=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/Analysis/IPA/CallGraphSCCPass.cpp:455</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#21 0x00007ffff6008f22 in runOnModule (this=0x67a650, M=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/VMCore/PassManager.cpp:1588</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#22 0x00007ffff600961b in run (this=0x67a000, M=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/VMCore/PassManager.cpp:1672</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#23 0x00007ffff6009acd in run (this=0x675da0, M=...)</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">    at /home/kharris/llvm30/llvm-3.0rc4.src/lib/VMCore/PassManager.cpp:1716</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#24 0x00007ffff547c735 in dt_llvm_compile_function () at Debug/../dt_llvm.cpp:7518</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#25 0x00007ffff54540ff in generateFunc () at Debug/../dt_interface.cpp:1014</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#26 compiler_thread () at Debug/../dt_interface.cpp:791</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#27 0x00007ffff79c3a4f in start_thread () from /lib64/libpthread.so.0</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#28 0x00007ffff6fb782d in clone () from /lib64/libc.so.6</font></div>
<div><font face="Calibri, sans-serif" color="#1F497D">#29 0x0000000000000000 in ?? ()</font></div>
<div> </div>
<ol start="2" style="margin-top: 0pt; margin-bottom: 0pt; margin-left: 36pt; ">
<li>I had no problem running the V3.0 regression tests according to the instructions.  However, the instructions in the Testing Infrastructure Guide for running the Test Suite presume the existence and use of llvm-gcc, <a href="http://llvm.org/docs/TestingGuide.html"><font color="#0000FF"><u>http://llvm.org/docs/TestingGuide.html</u></font></a>,
both on-line and in the rc4 kits.  Now that llvm-gcc is gone for V3.0, it isn’t completely obvious how to run the test-suite using clang rather than llvm-gcc.  I’ve made a couple stabs at it without success.  If there is new documentation that I’ve missed,
please be kind when you point out where I should have looked.  :-}</li><li>We see a modest performance improvement from the use of V3.0rc4, over V2.9, but our largest test appears to run out of memory during the Greedy Register allocator when we enable our extensive Type Based Alias Analysis tags in the IR, and run in DEBUG+ASSERTs
mode (but not in RELEASE mode).  I’m somewhat at a loss in how to properly report this problem, with basic blocks numbering in the thousands.  If anyone is interested in tracking this down, please provide some suggestions about how to capture the IR and environmental
info to file a meaningful bug report.  </li></ol>
<div> </div>
<div>        Thanks in advance for any info on these topics!</div>
<div> </div>
<div>        -Kevin Harris, Unisys</div>
<div> </div>
</font>
</body>
</html>