LLVM backend for 6502
Go to file
Chris Lattner be577659d3 Step #1 to giving Callgraph some sane invariants. The problems with callgraph
stem from the fact that we have two types of passes that need to update it:

1. callgraphscc and module passes that are explicitly aware of it
2. Functionpasses (and loop passes etc) that are interlaced with CGSCC passes
   by the CGSCC Passmgr.

In the case of #1, we can reasonably expect the passes to update the call
graph just like any analysis.  However, functionpasses are not and generally
should not be CG aware.  This has caused us no end of problems, so this takes
a new approach.  Logically, the CGSCC Pass manager can rescan every function 
after it runs a function pass over it to see if the functionpass made any 
updates to the IR that affect the callgraph.  This allows it to catch new calls
introduced by the functionpass.

In practice, doing this would be slow.  This implementation keeps track of
whether or not the current scc is dirtied by a function pass, and, if so, 
delays updating the callgraph until it is actually needed again.  This was
we avoid extraneous rescans, but we still have good invariants when the
callgraph is needed.

Step #2 of the "give Callgraph some sane invariants" is to change CallGraphNode
to use a CallBackVH for the callsite entry of the CallGraphNode.  This way
we can immediately remove entries from the callgraph when a FunctionPass is
active instead of having dangling pointers.  The current pass tries to tolerate
these dangling pointers, but it is just an evil hack.

This is related to PR3601/4835/4029.  This also reverts r80541, a hack working
around the sad lack of invariants.





git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80566 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-31 07:23:46 +00:00
autoconf install-sh chmods to 0755 by default, and this causes 'git diff' to show 2009-08-28 16:12:48 +00:00
bindings Fix header comment for bindings/ocaml/llvm/Makefile. 2009-08-30 23:41:20 +00:00
cmake CMake: updated library dependencies. 2009-08-31 01:58:50 +00:00
docs Add regular expression matching support, based on OpenBSD regexec()/regcomp() 2009-08-30 08:24:09 +00:00
examples Allocate the module provider in the Kaleidoscope code on the heap, not the stack, so that it can be properly deleted. Also update the tutorial with the new code. This fixes PR4762, hopefully better than the last time. 2009-08-26 20:58:25 +00:00
include Step #1 to giving Callgraph some sane invariants. The problems with callgraph 2009-08-31 07:23:46 +00:00
lib Step #1 to giving Callgraph some sane invariants. The problems with callgraph 2009-08-31 07:23:46 +00:00
projects install-sh chmods to 0755 by default, and this causes 'git diff' to show 2009-08-28 16:12:48 +00:00
runtime Read Makefile.config before using LLVMGCC. 2009-08-28 16:13:45 +00:00
test fix a crash building SPASS by tolerating a callsite that doesn't exist 2009-08-31 05:46:59 +00:00
tools only print the override triple if it exists! 2009-08-31 03:22:35 +00:00
unittests update unit test for previous change. 2009-08-31 00:28:46 +00:00
utils PR4795: Remove EEVT::isFP, isInt and isVec types used by TableGen's type 2009-08-29 05:53:25 +00:00
website
win32
Xcode
build-for-llvm-top.sh
CMakeLists.txt revert r78628 and r78803 as these are not needed any more 2009-08-25 23:02:21 +00:00
configure install-sh chmods to 0755 by default, and this causes 'git diff' to show 2009-08-28 16:12:48 +00:00
CREDITS.TXT Add myself to the blame list. 2009-08-20 15:20:15 +00:00
LICENSE.TXT Add regular expression matching support, based on OpenBSD regexec()/regcomp() 2009-08-30 08:24:09 +00:00
llvm.spec.in
Makefile re-apply r80197, now that iterator.h is not mentioned any more 2009-08-27 17:07:35 +00:00
Makefile.common
Makefile.config.in The attached patches attempt to fix cross builds. For example, if you 2009-08-18 00:40:33 +00:00
Makefile.rules Fix creation of .bca libraries with EXPORTED_SYMBOLS_LIST, this was putting the 2009-08-28 16:14:46 +00:00
ModuleInfo.txt
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level 
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments. 

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the HTML documentation provided in docs/index.html for further
assistance with LLVM.