Martin
ddfaac10b3
Rename DtoAggrCopy/ZeroInit() to DtoMemCpy/SetZero() overloads
...
And replace some obvious load->store combos by a memcpy.
2015-12-04 22:23:09 +01:00
Martin
740a21eb8f
Rename DtoIsPassedByRef() to DtoIsInMemoryOnly()
...
Motivation: issue #937
2015-12-04 22:23:09 +01:00
Martin
2dfa5e8569
Some more cosmetic fixes
...
Found by searching for lines > 80 chars.
2015-11-05 19:12:32 +01:00
Martin
04ab1c2441
Clarify semantics of TargetABI::passByVal()
2015-11-02 23:35:27 +01:00
David Nadlinger
05d45350aa
clang-tidy: Add readability-else-after-return
2015-11-02 11:30:40 +02:00
David Nadlinger
9df487edff
gen/ir: clang-tidy the world
2015-11-02 11:30:40 +02:00
David Nadlinger
44b0f7b615
driver/gen/ir: clang-format the world
...
This uses the LLVM style, which makes sense for sharing code
with other LLVM projects. The DMD code we use will soon all
be in D anyway.
2015-11-02 00:28:01 +02:00
Martin
90197d6c72
Simplify working with LLVM attributes
2015-11-01 16:19:27 +01:00
Martin
60d676e2a1
Drop support for LLVM < 3.5
...
This allows to clean up the code a little.
2015-10-30 22:24:05 +01:00
Martin
05c10d9107
Introduce DtoAlignment() and overload DtoAlloca() for VarDeclarations
...
Trying to get the alignment right by using the first non-default one
in the following order of descending priority:
VarDeclaration::alignment [variables only of course]
Type::alignment()
Type::alignsize()
This fixes `align(x) struct S { ... }`.
2015-10-18 14:38:09 +02:00
Martin
5c68fb25a4
Win64 ABI: pass 'this' before 'sret' for extern (C++)
2015-10-12 22:15:49 +02:00
Martin
2801b6f590
Extract the implicit args part from DtoCallFunction() as dedicated function
2015-10-12 22:15:34 +02:00
David Nadlinger
e624a96dc8
Properly mark stack slot for struct return as lvalue
2015-09-26 01:51:32 +02:00
Martin
80c677be46
Slightly refactor ABIRewrite interface for clarification
...
* put(): pass DValue alone, without explicit D type
* get(): pass LLValue instead of a faked DValue
2015-09-26 00:30:24 +02:00
Martin
9e194bfe2c
Refactor store-to-new-alloca code occurrences.
2015-09-25 17:12:42 +02:00
Martin
a721b4f823
Revise DtoRawAlloca() alignments
2015-09-25 15:16:28 +02:00
Martin
1a42358cf6
Treat atomic instructions as intrinsics
...
Whose types aren't rewritten by the regular TargetABI.
2015-09-18 00:02:57 +02:00
David Nadlinger
8db6aa8224
Work around instruction dominance issue with struct ctors
2015-09-14 09:29:34 +02:00
Kai Nacke
56482f8e30
Implement 128bit atomic load, atomic store and cmpxchg.
...
This is required for compiling latest vibe.d version.
Please note that a fix to vibe.d is also required, see
https://github.com/rejectedsoftware/vibe.d/pull/1255
2015-09-10 21:03:21 +02:00
David Nadlinger
ee50259dfd
C ABI: Do not pass empty structs as parameters at all
...
This is most visible on x86 (32-bit), where the stack
alignment is off otherwise.
This change is quite messy because many places assumed
that there was always exactly one LLVM parameter per
TypeFunction::parameters entry.
2015-08-22 23:41:56 +02:00
David Nadlinger
159a1d0f30
Factor out handling of "magic" intrinsics to separate function
2015-08-19 19:56:39 +02:00
David Nadlinger
4bcae9731a
The big catch/finally rework, part 2
...
Now with *almost* working EH codegen. Does not compile Phobos yet
because we run into the "instruction does not dominate all uses"
issue when an r-value result of toElemDtor is used and we need to
run cleanups in between. Should easily be fixed by promoting those
values to allocas.
Most of the changes outside of ir/irfunction.{h, cpp} are just
because CreateCallOrInvoke moved locations. I took the
opportunity to also make use of the different arg count
overloads where possible.
2015-08-19 19:56:39 +02:00
David Nadlinger
610601de8d
Remove dead code and nondescript 'tmp' names
2015-07-28 02:35:27 +02:00
Martin
4b6bd7ab52
Merge branch 'master' into merge-2.067
2015-07-18 16:02:51 +02:00
Kai Nacke
4cf4690ab0
Use C calling convention for variadic functions on x86.
...
0.15.1 used stdcall convention everywhere. But the ABI change in 0.15.2
requires use of the C calling convention for variadic calls on x86
because the stdcall convention does not support vararg functions.
Solution is to check the llvm::FunctionType if the function has varargs.
This commit also makes the C calling convention the global default
because according to the LLVM documentation the fastcc convention used
for D linkage does not support varargs.
This fixes issue #1000 .
2015-07-15 21:34:00 +02:00
Kai Nacke
d1e764cec1
Backport of "Avoid using llvm::Linker" to master.
...
See pull request #974 for the original code.
2015-06-27 22:08:44 +02:00
David Nadlinger
0922254dd1
Directly emit IR into same llvm::Module instead of using Linker
...
GitHub: Fixes #970 .
2015-06-14 21:36:35 +02:00
Kai Nacke
7159aa5392
Merge branch 'master' into merge-2.067
2015-04-16 07:27:09 +02:00
Johan Engelen
8396fc941b
Modify stripModifiers
to optionally work transitively.
...
Strip modifiers transitively when testing whether to repaint return type.
2015-04-14 22:06:44 +02:00
Martin
95dfcf74f7
Don't attempt to return "ref void" as lvalue.
...
The 2.067 front-end doesn't rewrite "ref void" to "void" anymore.
2015-03-22 15:39:09 +01:00
Martin
c3f2e19c53
Fix AttrSet struct for LLVM 3.1 and 3.2.
...
Use a map instead of a vector as the attribute index may get as
high as 0xFFFFFFFF (LLVM 3.1), apparently for function attributes.
2015-02-23 22:53:09 +01:00
Martin
08c4c07cc4
Get rid of superfluous loads and stores when rewriting return values.
2015-02-23 22:52:11 +01:00
Martin
b81f6ab688
varargs fix: don't pass small structs by reference
...
This block is pretty hacky.
2015-02-23 22:52:11 +01:00
Martin
76d65d45b5
Never rewrite varargs passed by value.
2015-02-23 22:52:11 +01:00
Martin
97dfd89127
SysV ABI: prevent varargs from being only partially passed in registers.
2015-02-23 22:52:11 +01:00
Martin
6bb2c30c05
SysV ABI: prevent structs from being only partially passed in registers.
...
Only for formal parameters for now, optional args still need to be fixed.
2015-02-23 22:52:11 +01:00
Martin
e7bfb78632
Refactor attributes system.
...
By introducing abstractions for attribute builder and set since they differ
greatly between LLVM 3.1-3.3.
2015-02-23 22:52:11 +01:00
Martin
b4a481976d
Refactor/simplify DtoCallFunction().
...
* No need to keep the argiter iterator up-to-date, simply make use of
args.size().
* Simplify signature of addTypeinfoArrayArgumentForDVarArg().
* Don't perform casts to void* for arguments to vararg intrinsics here.
TargetABI now takes care of this.
* Simplify handling of reversed parameter order by allocating all
elements first and then simply indexing.
2015-02-23 22:52:11 +01:00
Martin
c19550ad39
Fix va_arg intrinsic.
2015-02-23 22:52:11 +01:00
Martin
e5deefb1dd
Re-implement __va_list struct allocation for System V AMD64 varargs ABI.
2015-02-23 22:52:11 +01:00
Martin
9839cfb889
Experimental varargs fix
2015-02-23 22:52:10 +01:00
kai
024b14cd7f
Fix some warnings.
...
These are easy to solve and reduce the noise in the Travis build.
2014-12-26 15:59:23 +01:00
David Nadlinger
e4aa92deb3
Get rid of more superfluous casts with DMD arrays.
...
There are still a few more left.
2014-11-16 08:00:17 +01:00
Alexey Prokhin
4e2d45a409
Move irFty fields to backend ir classes
2014-10-05 16:55:22 +04:00
Alexey Prokhin
0f7a3b64c5
Make FuncDeclaration::isIntrinsic and FuncDeclaration::isVaIntrinsic free functions
2014-10-05 16:08:58 +04:00
Andreas Hollandt
afcd0aad41
add a few IR names
2014-10-02 14:36:51 +02:00
Andreas Hollandt
6db62ee8a9
remove all the "tmp" IR names
2014-10-02 14:36:51 +02:00
Kai Nacke
58ff4f1807
More support for PPC64le target.
2014-09-27 20:44:07 -04:00
Alexey Prokhin
d9189acbc4
Move toElem/toConstElem to visitors
2014-08-27 16:22:02 +04:00
Alexey Prokhin
a6f358c59b
Remove LINKintrisic
2014-07-10 18:10:46 +04:00