#
ed203667 |
| 16-Jan-2008 |
Dale Johannesen <dalej@apple.com> |
Do not mark EH tables no-dead-strip unless the associated function is so marked.
llvm-svn: 46088
|
#
f3efadcb |
| 07-Jan-2008 |
Chris Lattner <sabre@nondot.org> |
remove #includage
llvm-svn: 45697
|
#
f3ebc3f3 |
| 29-Dec-2007 |
Chris Lattner <sabre@nondot.org> |
Remove attribution from file headers, per discussion on llvmdev.
llvm-svn: 45418
|
#
030bce7b |
| 19-Dec-2007 |
Duncan Sands <baldrick@free.fr> |
The C++ exception handling personality function wants to know about calls that cannot throw ('nounwind'): if such a call does throw for some reason then the personality will terminate the program. T
The C++ exception handling personality function wants to know about calls that cannot throw ('nounwind'): if such a call does throw for some reason then the personality will terminate the program. The distinction between an ordinary call and a nounwind call is that an ordinary call gets an entry in the exception table but a nounwind call does not. This patch sets up the exception table appropriately. One oddity is that I've chosen to bracket nounwind calls with labels (like invokes) - the other choice would have been to bracket ordinary calls with labels. While bracketing ordinary calls is more natural (because bracketing by labels would then correspond exactly to getting an entry in the exception table), I didn't do it because introducing labels impedes some optimizations and I'm guessing that ordinary calls occur more often than nounwind calls. This fixes the gcc filter2 eh test, at least at -O0 (the inliner needs some tweaking at higher optimization levels).
llvm-svn: 45197
show more ...
|
#
edf07887 |
| 17-Dec-2007 |
Christopher Lamb <christopher.lamb@gmail.com> |
Change the PointerType api for creating pointer types. The old functionality of PointerType::get() has become PointerType::getUnqual(), which returns a pointer in the generic address space. The new p
Change the PointerType api for creating pointer types. The old functionality of PointerType::get() has become PointerType::getUnqual(), which returns a pointer in the generic address space. The new prototype of PointerType::get() requires both a type and an address space.
llvm-svn: 45082
show more ...
|
#
cc45c338 |
| 30-Nov-2007 |
Devang Patel <dpatel@apple.com> |
Provide a way to update DescGlobals cache directly.
llvm-svn: 44446
|
Revision tags: llvmorg-2.1.0 |
|
#
3c1b7fc0 |
| 05-Sep-2007 |
Duncan Sands <baldrick@free.fr> |
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++ personali
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.
llvm-svn: 41718
show more ...
|
#
ef5a6542 |
| 27-Aug-2007 |
Duncan Sands <baldrick@free.fr> |
There is an impedance matching problem between LLVM and gcc exception handling: if an exception unwinds through an invoke, then execution must branch to the invoke's unwind target. We previously tri
There is an impedance matching problem between LLVM and gcc exception handling: if an exception unwinds through an invoke, then execution must branch to the invoke's unwind target. We previously tried to enforce this by appending a cleanup action to every selector, however this does not always work correctly due to an optimization in the C++ unwinding runtime: if only cleanups would be run while unwinding an exception, then the program just terminates without actually executing the cleanups, as invoke semantics would require. I was hoping this wouldn't be a problem, but in fact it turns out to be the cause of all the remaining failures in the LLVM testsuite (these also fail with -enable-correct-eh-support, so turning on -enable-eh didn't make things worse!). Instead we need to append a full-blown catch-all to the end of each selector. The correct way of doing this depends on the personality function, i.e. it is language dependent, so can only be done by gcc. Thus this patch which generalizes the eh.selector intrinsic so that it can handle all possible kinds of action table entries (before it didn't accomodate cleanups): now 0 indicates a cleanup, and filters have to be specified using the number of type infos plus one rather than the number of type infos. Related gcc patches will cause Ada to pass a cleanup (0) to force the selector to always fire, while C++ will use a C++ catch-all (null).
llvm-svn: 41484
show more ...
|
#
383a3247 |
| 14-Jul-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
Long live the exception handling!
This patch fills the last necessary bits to enable exceptions handling in LLVM. Currently only on x86-32/linux.
In fact, this patch adds necessary intrinsics (and
Long live the exception handling!
This patch fills the last necessary bits to enable exceptions handling in LLVM. Currently only on x86-32/linux.
In fact, this patch adds necessary intrinsics (and their lowering) which represent really weird target-specific gcc builtins used inside unwinder.
After corresponding llvm-gcc patch will land (easy) exceptions should be more or less workable. However, exceptions handling support should not be thought as 'finished': I expect many small and not so small glitches everywhere.
llvm-svn: 39855
show more ...
|
#
4836e3a6 |
| 05-Jul-2007 |
Duncan Sands <baldrick@free.fr> |
Make sure only one copy of a filter is placed in the exception handling table if we encounter it multiple times. Filters could be folded harder than this, but that would mean a lot more work for not
Make sure only one copy of a filter is placed in the exception handling table if we encounter it multiple times. Filters could be folded harder than this, but that would mean a lot more work for not much gain.
llvm-svn: 37908
show more ...
|
#
f708f73a |
| 02-Jun-2007 |
Duncan Sands <baldrick@free.fr> |
The semantics of invoke require that we always jump to the unwind block (landing pad) when an exception unwinds through the call. This doesn't quite match the way the dwarf unwinder works: by defaul
The semantics of invoke require that we always jump to the unwind block (landing pad) when an exception unwinds through the call. This doesn't quite match the way the dwarf unwinder works: by default it only jumps to the landing pad if the catch or filter specification matches, and otherwise it keeps on unwinding. There are two ways of specifying to the unwinder that it should "always" (more on why there are quotes here later) jump to the landing pad: follow the specification by a 0 typeid, or follow it by the typeid for the NULL typeinfo. GCC does the first, and this patch makes LLVM do the same as gcc. However there is a problem: the unwinder performs optimizations based on C++ semantics (it only expects destructors to be run if the 0 typeid fires - known as "cleanups"), meaning it assumes that no exceptions will be raised and that the raised exception will be reraised at the end of the cleanup code. So if someone writes their own LLVM code using the exception intrinsics they will get a nasty surprise if they don't follow these rules. The other possibility of using the typeid corresponding to NULL (catch-all) causes the unwinder to make no assumptions, so this is probably what we should use in the long-run. However since we are still having trouble getting exception handling working properly, for the moment it seems best to closely imitate GCC.
llvm-svn: 37399
show more ...
|
#
c063f5f3 |
| 02-Jun-2007 |
Duncan Sands <baldrick@free.fr> |
Integrate exception filter support and exception catch support. This simplifies the code in DwarfWriter, allows for multiple filters and makes it trivial to specify filters accompanied by cleanups o
Integrate exception filter support and exception catch support. This simplifies the code in DwarfWriter, allows for multiple filters and makes it trivial to specify filters accompanied by cleanups or catch-all specifications (see next patch). What a deal! Patch blessed by Anton.
llvm-svn: 37398
show more ...
|
Revision tags: llvmorg-2.0.0 |
|
#
3b327826 |
| 23-May-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
Mark all calls as "could throw", when exceptions are enabled. Emit necessary LP info too. This fixes PR1439
llvm-svn: 37311
|
#
bbaf5544 |
| 13-May-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
Emit multiple common EH frames for multiple (including blank) personality functions. This partly fixes PR1414: now we're restricted only to one personality function per eh frame, not per module. Furt
Emit multiple common EH frames for multiple (including blank) personality functions. This partly fixes PR1414: now we're restricted only to one personality function per eh frame, not per module. Further work on "multiple personalities" topic needs representative example.
llvm-svn: 37018
show more ...
|
#
13da1784 |
| 12-May-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
More DWARF-related things cleanup: 1. Fix PR1380 2. Apply Duncan's patch from PR1410 3. Insert workaround for "one personality function per module" as noted in PR1414 4. Emit correct debug frames for
More DWARF-related things cleanup: 1. Fix PR1380 2. Apply Duncan's patch from PR1410 3. Insert workaround for "one personality function per module" as noted in PR1414 4. Emit correct debug frames for x86/linux. This partly fixes DebugInfo/2006-11-06-StackTrace.cpp: stack trace is shown correctly, but arguments for function on top of stack are displayed incorrectly.
llvm-svn: 37015
show more ...
|
#
79a71ec3 |
| 11-May-2007 |
Devang Patel <dpatel@apple.com> |
Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070507/049516.html
llvm-svn: 36998
|
#
ee02c7d2 |
| 10-May-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
Ooops. Some debugging stuff :)
llvm-svn: 36978
|
#
96142de3 |
| 10-May-2007 |
Anton Korobeynikov <asl@math.spbu.ru> |
Allow multiple invokes per landing pad. This (probably) fixes PR1410.
llvm-svn: 36977
|
#
8c78a0bf |
| 03-May-2007 |
Devang Patel <dpatel@apple.com> |
Drop 'const'
llvm-svn: 36662
|
#
e95c6ad8 |
| 02-May-2007 |
Devang Patel <dpatel@apple.com> |
Use 'static const char' instead of 'static const int'. Due to darwin gcc bug, one version of darwin linker coalesces static const int, which defauts PassID based pass identification.
llvm-svn: 36652
|
#
41223586 |
| 02-May-2007 |
Lauro Ramos Venancio <lauro.venancio@gmail.com> |
Fix build error.
llvm-svn: 36648
|
#
09f162ca |
| 01-May-2007 |
Devang Patel <dpatel@apple.com> |
Do not use typeinfo to identify pass in pass manager.
llvm-svn: 36632
|
#
6458e6ac |
| 01-Mar-2007 |
Jim Laskey <jlaskey@mac.com> |
Collect eh filter info.
llvm-svn: 34804
|
#
88dd2fd3 |
| 21-Feb-2007 |
Jim Laskey <jlaskey@mac.com> |
Add structures used for collecting eh information.
llvm-svn: 34473
|
#
c3de9b4b |
| 01-Feb-2007 |
Jim Laskey <jlaskey@mac.com> |
Support for non-landing pad exception handling.
llvm-svn: 33755
|