llvm/lib
Roman Levenstein e513ba4958 Some improvements related to the computation of isReachable.
This fixes Bugzilla #1835 (http://llvm.org/bugs/show_bug.cgi?id=1835).
This patched is reviewed by Tanya and Dan. Dan tested and approved it.

The reason for the bad performance of the old algorithm is that it is very naive and scans every
time all nodes of the DAG in the worst case.

This patch introduces  a new algorithm based on the paper "Online algorithms
for maintaining the topological order of a directed acyclic graph" by
David J.Pearce and Paul H.J.Kelly. This is the MNR algorithm. It has a
linear time worst-case and performs much better in most situations.

The paper can be found here:
http://fano.ics.uci.edu/cites/Document/Online-algorithms-for-maintaining-the-topological-order-of-a-directed-acyclic-graph.html

The main idea of the new algorithm is to compute the topological ordering of the SNodes in the
DAG and to maintain it even after DAG modifications. The topological ordering allows for very fast 
node reachability checks. 

Tests on very big  input files with tens of thousands of instructions in a BB indicate huge 
speed-ups (up to 10x compilation time improvement) compared to the old version.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48817 91177308-0d34-0410-b5e6-96231b3b80d8
2008-03-26 09:18:09 +00:00
..
Analysis Don't include <map> in Pass.h, which doesn't need it. This requires 2008-03-21 23:51:57 +00:00
Archive
AsmParser Add explicit keywords. 2008-03-25 22:06:05 +00:00
Bitcode Add explicit keywords. 2008-03-25 22:06:05 +00:00
CodeGen Some improvements related to the computation of isReachable. 2008-03-26 09:18:09 +00:00
Debugger
ExecutionEngine Add explicit keywords. 2008-03-25 22:06:05 +00:00
Linker
Support Add explicit keywords. 2008-03-25 22:06:05 +00:00
System Revert r48676. I had plans for using it, but now it's just dead code. 2008-03-24 21:29:58 +00:00
Target Fix some SSE4.1 instruction encoding bugs. 2008-03-26 08:11:49 +00:00
Transforms Handle a special case xor undef, undef -> 0. Technically this should be transformed to undef. But this is such a common idiom (misuse) we are going to handle it. 2008-03-25 20:07:13 +00:00
VMCore Add explicit keywords. 2008-03-25 22:06:05 +00:00
Makefile