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
Christian Kamm
9812a8c8ae
Commit workaround for TypeFunction comparing issue.
2009-04-30 23:16:21 +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
Frits van Bommel
f712c48312
Check in some old changes to the binding, from before I had commit access.
...
- Add bindings for InsertValue and ExtractValue
- Updates to use new APIs where they were renamed or removed.
- Add generic error messages if LLVM didn't provide one.
- Enable typesafe variadic arguments for GetGEP.
2009-04-27 22:34:36 +02:00
Frits van Bommel
e3b8cb29ea
Committing LLVM binding for D as it currently exists in the SVN repository.
2009-04-27 22:33:17 +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
Tomas Lindquist Olsen
3bd5cf70c2
Added testcase for overlapping struct default initializer I has missed. Slight tweak of the relevant error message.
2009-04-27 01:43:29 +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
Christian Kamm
5b71e2ef81
Fix interface indices. Closes #269 and #266 .
2009-04-26 11:29:30 +02:00
Christian Kamm
c6b059ed73
Add (currently failing) test for correct virtual call resolution.
2009-04-26 10:29:39 +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
Christian Kamm
0485196ae8
Fix parsing of import statements to only pass valid identifiers to Import
...
constructor. Fixes #264 .
2009-04-23 20:44:55 +02:00
Christian Kamm
a38d34dead
Trivial fix for bug #265
2009-04-23 20:28:29 +02:00
Kelly Wilson
d21cdb1df0
Changes for mingw to compile properly
2009-04-22 14:49:49 -06:00
Kelly Wilson
5c4455a394
Change needed for mingw
2009-04-22 14:40:56 -06:00
Tomas Lindquist Olsen
687395cda6
Rewrote runtime struct literal codegen.
2009-04-22 03:08:28 +02:00
Tomas Lindquist Olsen
f6f12e4241
Added checks for overlapping union initializers, as shown in bug #259 .
2009-04-22 01:18:21 +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
Tomas Lindquist Olsen
ea2279b11a
Updated the interal runtime's ClassInfo type to match the one in object.di .
...
Runtime now compiles and runminitest is back to normal except for typeinfo10.d .
2009-04-17 02:54:16 +02:00
Tomas Lindquist Olsen
3d9598d854
Merge with rev [1221]
2009-04-17 01:19:03 +02:00