Commit Graph

825 Commits

Author SHA1 Message Date
Frits van Bommel
5723fa7492 Add 'nounwind' attribute to the relevant runtime functions, and use it when
deciding whether or not to generate an invoke instead of a call.
2009-05-04 20:26:45 +02:00
Frits van Bommel
cf0b8936ce Factor out the code to find gcc, and add a command-line option to override the
default executable name.
This should help cross-compilation by allowing a cross-gcc to be specified from
the configuration file instead of only through the CC environment variable.
2009-05-04 13:32:16 +02:00
Frits van Bommel
f7e54dce10 Don't forget to update the control flow when deleting an invoke.
Fixes #284.
2009-05-04 12:08:30 +02:00
Frits van Bommel
fa79329102 Stack promotion for _d_newarrayvT. Array literals, concatenations (a ~ b) and
such are eligible for stack-allocation now.
2009-05-03 18:01:45 +02:00
Frits van Bommel
a2eee70761 Add -verify-each option to ease debugging 2009-05-03 21:58:28 +02:00
Frits van Bommel
67fc0aca20 Remove some overly verbose debug output 2009-05-03 20:19:49 +02:00
Frits van Bommel
865ae79e27 Strip metadata even when addPassesForOptLevel() isn't called, for instance when
only inlining or when manually specifying passes.
2009-05-03 20:16:15 +02:00
Frits van Bommel
3572944b90 Remove bogus noalias attribute from _d_arraysetlength[i]T. 2009-05-03 15:24:05 +02:00
Christian Kamm
77100f890c Make static int[] a = [1, 2]; a[0] = 4; not segfault
by making the array data ptr a non-const global variable.
2009-05-03 11:16:54 +02:00
Frits van Bommel
c831367b24 Factor out some constants into the header so producers and consumers of
metadata stay in sync (and are more readable).
2009-05-02 20:42:58 +02:00
Matti Niemenmaa
87d960c29a Fix build when USE_METADATA is off. 2009-05-02 19:03:33 +03:00
Frits van Bommel
262ef97945 There's an issue with LLVM metadata support; it triggers an assert when trying
to generate asm for code with metadata globals.
This new pass is used as a workaround: it strips metadata from the module before
it reaches the code generator.
Obviously, this is disabled if LLVM doesn't support metadata.
2009-05-02 12:19:43 +02:00
Frits van Bommel
34955bcbf9 Remove calls to some runtime functions if their results are unused 2009-05-02 11:58:50 +02:00
Frits van Bommel
cff0f1f446 Implement another D-specific pass: -dgc2stack
This one promotes GC allocations to stack memory when it can determine it's safe
to do so.
Not all GC calls are recognized yet (in fact only one *is* recognized for now).
Needs metadata, so disabled for LLVM versions that don't support it.
2009-05-02 11:58:50 +02:00
Frits van Bommel
a9c518d82b Add metadata for TypeInfo -> llvm::Type mapping.
Disabled for LLVM versions before the introduction of metadata.
2009-05-02 11:58:50 +02:00
Frits van Bommel
6c91185a77 Remove some dead code. 2009-05-02 11:58:50 +02:00
Frits van Bommel
da4450d2f5 Make sure this still compiles after LLVM r70437, which introduces a
specialization for command-line option template parser<char> which does the
wrong thing for us...
2009-04-30 12:25:04 +02:00
Frits van Bommel
96108f8e7c Now the backend wants an enum value as optimization level.
Hopefully this'll be the last change to that code...
2009-04-30 11:56:03 +02:00
Tomas Lindquist Olsen
ca39bb4f4d Fixed array operation codegen when used from imported templates. All array operations are now emitted with template linkage. Fixed #270 . 2009-04-29 18:59:39 +02:00
Tomas Lindquist Olsen
617861ead4 Fixed file name in imported mixins containing assertions. 2009-04-29 18:39:59 +02:00
Frits van Bommel
b6a6391116 Add some attributes to runtime calls, to provide the standard LLVM optimization
passes with more information.
2009-04-29 17:47:24 +02:00
Frits van Bommel
b9849d86b6 Update codegen to (hopefully) work correctly with newer LLVM trunk, where
there's no longer a Fast flag. (It has been replaced by an optimization level)
Untested because I haven't compiled that recent an LLVM yet :).
2009-04-29 10:26:28 +02:00
Frits van Bommel
0df1e34eb2 Implement first D-specific optimization pass: -simplify-drtcalls.
It uses the machinery of the standard -simplify-libcalls pass, but optimizes
calls to the D runtime instead of calls to C libraries.

At the moment, these optimizations are implemented by this pass:
 - Avoid the runtime call for `arr.length = newlen` if it can determine that
   the new length isn't longer than the old one.
 - Ditto for `cast(T[]) arr` if it will clearly always succeed.
   (e.g. if the length of the original array is zero, or if the old element
   size is a multiple of the new element size)
2009-04-28 21:58:06 +02:00
Tomas Lindquist Olsen
f290ff0530 Forgot the special case part in last !ThisExp change. 2009-04-27 13:59:15 +02:00
Tomas Lindquist Olsen
95b94935ee Moved special casing of 'assert(this, "null this");' generated statements from !ThisExp into !AssertExp.
Fixed filenames for array bounds errors and probably others, fixes #271 .
2009-04-27 13:30:48 +02:00
Tomas Lindquist Olsen
ba38e15f0d Fixed class default initializers and type generation. Bug #260 is fixed. 2009-04-27 03:40:40 +02:00
Frits van Bommel
664c2c333e Remove a bit of code duplication. 2009-04-26 20:36:53 +02:00
Frits van Bommel
5d63aeaed9 Fix a logic bug. 2009-04-26 20:31:48 +02:00
Christian Kamm
17dbddfe41 Force 'fast' compilation when debug info is requested. LLVM trunk seems to
skip debug info for non-fast compilation.
2009-04-26 18:21:07 +02:00
Tomas Lindquist Olsen
73f93d7240 Merge 2009-04-25 18:27:11 +02:00
Tomas Lindquist Olsen
3e882d422b Fixed struct default initializers. 2009-04-25 18:26:54 +02:00
Christian Kamm
8916f783b7 Revert change to treat bodyless functions in abstract classes as abstract.
See DMD bug 2894.
2009-04-25 09:11:32 +02:00
Frits van Bommel
83dda319ae Add #include "gen/llvm-version.h" to files that use the macro it defines... 2009-04-24 16:47:42 +02:00
Tomas Lindquist Olsen
687395cda6 Rewrote runtime struct literal codegen. 2009-04-22 03:08:28 +02:00
Tomas Lindquist Olsen
575038bfbd Fixed classinfo.interfaces for .. interfaces! 2009-04-21 20:19:53 +02:00
Tomas Lindquist Olsen
4567a55f7f Fixed emitting declarations nested inside interfaces. 2009-04-21 19:32:22 +02:00
Christian Kamm
f6772bd600 Add forgotten null check. 2009-04-21 19:17:29 +02:00
Christian Kamm
0e6364a158 Automated merge with http://hg.dsource.org/projects/ldc 2009-04-21 18:57:29 +02:00
Tomas Lindquist Olsen
b3db60cbda Merge. 2009-04-21 17:54:43 +02:00
Frits van Bommel
0e8216fbd6 Remove some logging I didn't mean to commit. 2009-04-20 00:04:35 +02:00
Frits van Bommel
21f273671a Fix a problem which occurred when a function type was forward-referenced by
parameter types.

This was intended to fix the following test case:
{{{
  void delegate(Hit) dg;
  struct Hit { void delegate(Hit) a; }
}}}
which ChristianK reduced from a problem downs had on IRC.

It also seems to fix mini/compile_delegate.d (which turns out to be quite
similar, but produced a different error message).
2009-04-19 23:15:03 +02:00
Frits van Bommel
e05b960bbe No need for temporary alloca's here, use a phi node instead. 2009-04-19 19:28:10 +02:00
Christian Kamm
522c580647 Do not emit declare or emit a vtbl entry for bodyless functions in abstract classes.
Maybe the better fix would be to adjust FuncDeclaration::isAbstract, but there
may be unwelcome sideeffects.
2009-04-19 00:06:23 +02:00
Frits van Bommel
081efcbb7d Copy alloca'd parameters referenced by nested functions to the nesting frame. 2009-04-18 00:34:20 +02:00
Tomas Lindquist Olsen
134870c873 Disabled resetting types between modules MAO (more at once). Fixes guaranteed MOA compilation segfault. 2009-04-17 17:16:55 +02:00
Tomas Lindquist Olsen
36f3161803 Merge. 2009-04-17 14:48:37 +02:00
Tomas Lindquist Olsen
1c79df3817 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'. 2009-04-17 14:38:29 +02:00
Frits van Bommel
46565f1adc Fix nested functions.
My last patch was a little over-zealous in passing `undef`, it always passed
`undef` to inner functions expecting a single context frame.
2009-04-17 13:50:01 +02:00
Frits van Bommel
0262a6ec8f Use 'undef' instead of null for unneeded contexts. 2009-04-17 03:47:56 +02:00
Tomas Lindquist Olsen
f5ce8eda1d Resolve all base classes, including interfaces (!) before resolving the class itself. 2009-04-17 03:01:43 +02:00