LLVM backend for 6502
Go to file
Duncan Sands 57810cdac4 Fix PR1628. When exception handling is turned on,
labels are generated bracketing each call (not just
invokes).  This is used to generate entries in
the exception table required by the C++ personality.
However it gets in the way of tail-merging.  This
patch solves the problem by no longer placing labels
around ordinary calls.  Instead we generate entries
in the exception table that cover every instruction
in the function that wasn't covered by an invoke
range (the range given by the labels around the invoke).
As an optimization, such entries are only generated for
parts of the function that contain a call, since for
the moment those are the only instructions that can
throw an exception [1].  As a happy consequence, we
now get a smaller exception table, since the same
region can cover many calls.  While there, I also
implemented folding of invoke ranges - successive
ranges are merged when safe to do so.  Finally, if
a selector contains only a cleanup, there's a special
shorthand for it - place a 0 in the call-site entry.
I implemented this while there.  As a result, the
exception table output (excluding filters) is now
optimal - it cannot be made smaller [2].  The
problem with throw filters is that folding them
optimally is hard, and the benefit of folding them is
minimal.

[1] I tested that having trapping instructions (eg
divide by zero) in such a region doesn't cause trouble.
[2] It could be made smaller with the help of higher
layers, eg by having branch folding reorder basic blocks
ending in invokes with the same landing pad so they
follow each other.  I don't know if this is worth doing.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41718 91177308-0d34-0410-b5e6-96231b3b80d8
2007-09-05 11:27:52 +00:00
autoconf add mips target to builder. I'd appreciate it if someone with 2007-08-19 20:45:10 +00:00
docs There is an impedance matching problem between LLVM and 2007-08-27 15:47:50 +00:00
examples rename APInt::toString -> toStringUnsigned for symmetry with toStringSigned() 2007-08-23 05:15:32 +00:00
include fix reversal bug in preceding checkin 2007-09-04 17:32:27 +00:00
lib Fix PR1628. When exception handling is turned on, 2007-09-05 11:27:52 +00:00
projects Convert .cvsignore files 2007-06-29 16:35:07 +00:00
runtime Dror GCCLibraries: they are obsolete since 2.0 release. This also reduces number of licenses used in LLVM. 2007-08-21 22:40:44 +00:00
test Add the 64-bit versions of the DS* Altivec instructions. 2007-09-05 04:05:20 +00:00
tools Enable loop index split pass. 2007-09-04 20:46:58 +00:00
utils Always check the type of node. This prevents situations such as selecting 32-bit rotate target instruction for a 64-bit node when 64-bit pattern is missing. 2007-09-04 20:18:28 +00:00
website Prepare for "core" website. 2007-08-03 05:43:35 +00:00
win32 Update win32 VStudio project files to keep pace with recently added and deleted files 2007-08-28 18:59:02 +00:00
Xcode update the xcode project file, patch by Gordon Henriksen 2007-08-20 00:56:12 +00:00
build-for-llvm-top.sh Allow the configure options to be set according to the llvm-top options. 2007-08-31 19:53:42 +00:00
configure Updating configure script to enable MIPS. 2007-08-29 16:38:16 +00:00
CREDITS.TXT Alphabetize Raul's entry. 2007-08-29 18:21:29 +00:00
LICENSE.TXT Dror GCCLibraries: they are obsolete since 2.0 release. This also reduces number of licenses used in LLVM. 2007-08-21 22:40:44 +00:00
llvm.spec.in * llvm.spec.in: update blurb 2007-07-13 09:48:29 +00:00
Makefile Get rid of annoying spaces. 2007-07-11 23:44:08 +00:00
Makefile.common
Makefile.config.in Change the place where man pages are installed to ${prefix}/share/man1. This 2007-07-03 23:04:11 +00:00
Makefile.rules Restore ability to build archives (oops) 2007-07-23 08:20:46 +00:00
ModuleInfo.txt Update to include clean and install commands. 2007-07-20 20:54:41 +00:00
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.