Here are some recent stats of the fast vs local vs linear scan at O0 on "opt -std-compile-opts" processed bitcode files. The fast regalloc is still certainly faster at codegen than local with such bitcode files.  Let me know if the link doesn't work:<div>
<br></div><div><a href="https://spreadsheets.google.com/a/google.com/ccc?key=0At5EJFcCBf-wdDgtd2FoZjU4bFBzcFBtT25rQkgzMEE&hl=en">https://spreadsheets.google.com/a/google.com/ccc?key=0At5EJFcCBf-wdDgtd2FoZjU4bFBzcFBtT25rQkgzMEE&hl=en</a></div>
<div><br></div><div>Misc stuff: I ran into an "UNREACHABLE executed" using linear scan on revision 104021, so I used an older version for that.</div><div><br></div><div><div>0  llc.hg          0x0000000000af4d7f</div>
<div>1  llc.hg          0x0000000000af54fa</div><div>2  libpthread.so.0 0x00007fb1734b67d0</div><div>3  libc.so.6       0x00007fb1725d2095 gsignal + 53</div><div>4  libc.so.6       0x00007fb1725d3af0 abort + 272</div><div>
5  llc.hg          0x0000000000ad4932 llvm::llvm_unreachable_internal(char const*, char const*, unsigned int) + 370</div><div>6  llc.hg          0x0000000000886426 llvm::LiveIntervals::handleVirtualRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int, llvm::LiveInterval&) + 3910</div>
<div>7  llc.hg          0x0000000000888429 llvm::LiveIntervals::handleRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int) + 409</div>
<div>8  llc.hg          0x000000000088ade0 llvm::LiveIntervals::computeIntervals() + 2496</div><div>9  llc.hg          0x000000000088b56f llvm::LiveIntervals::runOnMachineFunction(llvm::MachineFunction&) + 447</div><div>
10 llc.hg          0x00000000007b3493 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) + 115</div><div>11 llc.hg          0x0000000000a79ec0 llvm::FPPassManager::runOnFunction(llvm::Function&) + 688</div>
<div>12 llc.hg          0x0000000000a79f13 llvm::FPPassManager::runOnModule(llvm::Module&) + 67</div><div>13 llc.hg          0x0000000000a79a63 llvm::MPPassManager::runOnModule(llvm::Module&) + 515</div><div>14 llc.hg          0x0000000000a79b42 llvm::PassManagerImpl::run(llvm::Module&) + 114</div>
<div>15 llc.hg          0x0000000000a79bdd llvm::PassManager::run(llvm::Module&) + 13</div><div>16 llc.hg          0x00000000004d3112 main + 2802</div><div>17 libc.so.6       0x00007fb1725be1c4 __libc_start_main + 244</div>
<div>18 llc.hg          0x00000000004d0b09</div><div><br></div><div><br></div><div><div><div>Stack dump:</div><div>0.      Program arguments: llc.hg -asm-verbose=false -O0 32/403.gcc/403.gcc.linked.bc -o 32/403.gcc/output/403.gcc.linked.bc.llc_O0.s </div>
</div><div>1.      Running pass 'Function Pass Manager' on module '32/403.gcc/403.gcc.linked.bc'.</div><div>2.      Running pass 'Live Interval Analysis' on function '@nonlocal_mentioned_p'</div>
</div><div><br></div><div>- Jan</div><br><div class="gmail_quote">On Mon, May 17, 2010 at 9:33 PM, Jakob Stoklund Olesen <span dir="ltr"><<a href="mailto:stoklund@2pi.dk">stoklund@2pi.dk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On May 17, 2010, at 9:09 PM, Rafael Espindola wrote:<br>
<br>
>> The fast and local register allocators are meant to be used on unoptimized code, a 'Debug build'. While they do work on optimized code, they do not give good results. Their primary goal is compile time, not code quality.<br>

><br>
> Yes, we have a somewhat uncommon use case. It is fine to spend time<br>
> optimizing bitcode (LTO is a OK), but we want to make the final IL -><br>
> Executable translation as fast as possible.<br>
<br>
</div>Do you know how the fast allocator performs in these conditions? Have you compared it to the local allocator? I really focused my efforts on unoptimized code.<br>
<font color="#888888"><br>
/jakob<br>
<br>
</font></blockquote></div><br></div>