LLVM backend for 6502
Go to file
Chris Lattner 6c3ee0f3c9 Fix PR8735, a really terrible problem in the inliner's "alloca merging"
optimization.

Consider:
static void foo() {
  A = alloca
  ...
}

static void bar() {
  B = alloca
  ...
  call foo();
}

void main() {
  bar()
}

The inliner proceeds bottom up, but lets pretend it decides not to inline foo
into bar.  When it gets to main, it inlines bar into main(), and says "hey, I
just inlined an alloca "B" into main, lets remember that.  Then it keeps going
and finds that it now contains a call to foo.  It decides to inline foo into
main, and says "hey, foo has an alloca A, and I have an alloca B from another
inlined call site, lets reuse it".  The problem with this of course, is that 
the lifetime of A and B are nested, not disjoint.

Unfortunately I can't create a reasonable testcase for this: the one in the
PR is both huge and extremely sensitive, because you minor tweaks end up
causing foo to get inlined into bar too early.  We already have tests for the
basic alloca merging optimization and this does not break them.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120995 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-06 07:52:42 +00:00
autoconf Apparently OS X 10.4 doesn't have __crashreporter_info__. 2010-12-03 07:45:22 +00:00
bindings Try to fix ocaml bindings. 2010-10-08 00:36:21 +00:00
cmake Disable C++ exception handling on MSVC. 2010-12-04 14:30:22 +00:00
docs Clarify some of the differences between indexing with getelementptr and indexing with insertvalue/extractvalue. 2010-12-05 20:54:38 +00:00
examples Fix missing includes of "llvm/Analysis/Passes.h" in the tutorials. Thanks 2010-11-16 17:28:22 +00:00
include Support/FileSystem: Add directory_iterator implementation. 2010-12-06 04:28:42 +00:00
lib Fix PR8735, a really terrible problem in the inliner's "alloca merging" 2010-12-06 07:52:42 +00:00
projects I swear I did a make clean and make before committing all this... 2010-11-29 18:47:54 +00:00
runtime Rename 'libprofile/exported_symbols.lst' to 'libprofile/libprofile.exports'. 2010-09-03 15:42:45 +00:00
test ptx: add shift instructions 2010-12-06 04:00:03 +00:00
tools Do not try luck by using given name to create temporary file. In parallel builds it may not work. 2010-12-03 23:58:31 +00:00
unittests Support/FileSystem: Add directory_iterator implementation. 2010-12-06 04:28:42 +00:00
utils KillTheDoctor: Cleanup error_code usage. 2010-12-06 04:28:01 +00:00
website
build-for-llvm-top.sh
CMakeLists.txt Disable C++ exception handling on MSVC. 2010-12-04 14:30:22 +00:00
configure Apparently OS X 10.4 doesn't have __crashreporter_info__. 2010-12-03 07:45:22 +00:00
CREDITS.TXT Convert a bunch of uses of 'bytecode' into 'bitcode'. This 2010-09-29 20:09:55 +00:00
LICENSE.TXT 2010 is upon us. 2010-01-09 18:40:31 +00:00
llvm.spec.in
Makefile Merge System into Support. 2010-11-29 18:16:10 +00:00
Makefile.common
Makefile.config.in It seems inconsistent to have LLVMCC_EMITIR_FLAG and 2010-11-25 17:57:43 +00:00
Makefile.rules Now to chant the magical incantation that will exorcise the System library 2010-11-29 19:44:50 +00:00
ModuleInfo.txt Remove trailing space. This is just an excuse to poke the 2010-10-05 20:32:15 +00:00
README.txt Undoing test commit blank space. 2010-09-29 17:39:29 +00:00

\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.

If you're writing a package for LLVM, see docs/Packaging.html for our
suggestions.