| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
| |
This is a GNU attribute that allows split stacks to be turned off on a
per-function basis.
Differential Revision: http://reviews.llvm.org/D3817
llvm-svn: 209167
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch implements global named registers in Clang, lowering to the just
created intrinsics in LLVM (@llvm.read/write_register). A new type of LValue
had to be created (Register), which just adds support to carry the metadata
node containing the name of the register. Two new methods to emit loads and
stores interoperate with another to emit the named metadata node.
No guarantees are being made and only non-allocatable global variable named
registers are being supported. Local named register support is unchanged.
llvm-svn: 209149
|
|
|
|
|
|
|
|
|
|
| |
and requires internal padding
When we were padding a struct to avoid splitting it between registers and
the stack, we were throwing away the type which the argument should be coerced
to.
llvm-svn: 209122
|
|
|
|
|
|
|
|
|
|
| |
Now that llvm cannot represent alias cycles, we have to diagnose erros just
before trying to close the cycle. This degrades the errors a bit. The real
solution is what it was before: if we want to provide good errors for these
cases, we have to be able to find a clang level decl given a mangled name
and produce the error from Sema.
llvm-svn: 209008
|
|
|
|
|
|
|
|
| |
This is a step towards handling these attributes on classes (PR11170).
Differential Revision: http://reviews.llvm.org/D3772
llvm-svn: 208925
|
|
|
|
| |
llvm-svn: 208875
|
|
|
|
| |
llvm-svn: 208868
|
|
|
|
| |
llvm-svn: 208761
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
current scope has not changed.
This looks like the right way for this check to work, but there is
another semi-obvious bug, I would think: why is CurLoc not zero'd out
between functions? The possibility for it to bleed between them seems
problematic. (& indeed I caused tests to fail when I fixed this a
different way, by setting CurLoc to SourceLocation() and the end of
EmitFunctionEnd... )
The changes to debug-info-blocks.m are due to a mismatch between the
source manager's file naming and CGDebugInfo's default handling when no
-main-file-name is specified. This actually reveals somewhat of a bug in
the debug info when using source files from standard in, too. See the
comment in CGDebugInfo::CreateCompileUnit for more details.
llvm-svn: 208742
|
|
|
|
| |
llvm-svn: 208665
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Most of the clang header patch by Simon Pilgrim @ SCEE.
Also fixed (or added) clang tests for these intrinsics.
LLVM tests to make sure we get the blend instruction out of these
shufflevectors are at http://reviews.llvm.org/D3600
Reviewers: eli.friedman, craig.topper, rafael
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D3601
llvm-svn: 208664
|
|
|
|
|
|
|
|
|
|
| |
Add ARM support for dllexport and dllimport attributes. This is a relatively
conservative change. The alternative is to entirely drop the architecture
requirement. The dllimport and dllexport attributes are not restricted to any
architecture, simply to platforms that support this attribute (currently
Windows).
llvm-svn: 208486
|
|
|
|
|
|
| |
registers'). Bots are now pacified.
llvm-svn: 208425
|
|
|
|
|
|
| |
registers'). This is a followon commit from r208413 which broke the LLVM bots.
llvm-svn: 208422
|
|
|
|
|
|
|
| |
This is the clang counterpart to 208413, which ensures that Homogeneous
Floating-point Aggregates are passed in consecutive registers on ARM.
llvm-svn: 208417
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
correctly.
Previously we calculated the shift amount based upon DataLayout::getTypeAllocSizeInBits.
This will only work for legal types - types such as i24 that are created as part of
structs for bitfields will return "32" from that function. Change to using
getTypeSizeInBits.
It turns out that AArch64 didn't run across this problem because it always returned
[1 x i64] as the type for a bitfield, whereas ARM64 returns i64 so goes down this
(better, but wrong) codepath.
llvm-svn: 208231
|
|
|
|
|
|
| |
didn't notice that the generated BE alignment register is now unnamed and is not called '%align_be'.
llvm-svn: 208217
|
|
|
|
|
|
|
| |
Just because the first "if" didn't fire, doesn't mean we can not have
an HFA in the "else" clause.
llvm-svn: 208216
|
|
|
|
|
|
|
|
|
|
|
|
| |
ABIArgInfo::getExpandWithPadding
In cases where a struct must, according to the AAPCS, not be split between
general purpose and floating point registers, we use
ABIArgInfo::getExpandWithPadding to add the padding arguments. However,
ExpandWithPadding does not work if the struct contains bitfields, so we
instead must use ABIArgInfo::getDirect.
llvm-svn: 208185
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
preceeds the declaration and initial use.
Reverting r208106 to reapply r208065 with a fix for the regression. The
issue was that the enum tried to be built even if the declaration hadn't
been constructed for debug info - presenting problems for enum templates
and typedefs of enums with names for linkage purposes.
Original commit message:
This regressed a little further 208055 though it was already a little
broken.
While the requiresCompleteType optimization should be implemented here.
Future (possibly near future) work.
llvm-svn: 208114
|
|
|
|
|
|
|
|
|
|
|
| |
the declaration and initial use."
This is breaking the compiler-rt build. Reverting while I
investigate/fix.
This reverts commit r208065.
llvm-svn: 208106
|
|
|
|
|
|
|
|
|
|
|
|
| |
declaration and initial use.
This regressed a little further 208055 though it was already a little
broken.
While the requiresCompleteType optimization should be implemented here.
Future (possibly near future) work.
llvm-svn: 208065
|
|
|
|
|
|
| |
This is in addition to the existing support for typedefs.
llvm-svn: 208053
|
|
|
|
|
|
| |
Warn if an alias requests a section other than the aliasee section.
llvm-svn: 207997
|
|
|
|
| |
llvm-svn: 207994
|
|
|
|
|
|
|
| |
Add support for the remaining hints from the ACLE. Although __dbg is listed as
a hint, it is handled different, so it is not covered by this change.
llvm-svn: 207930
|
|
|
|
|
|
| |
Also add basic cpp ABI tests where they differ from C ABI output.
llvm-svn: 207834
|
|
|
|
|
|
|
| |
This includes the addition of the virtual function:
TargetCodeGenInfo::EmitTargetMD()
llvm-svn: 207832
|
|
|
|
|
|
|
| |
ACLE adds the __sevl() extension. Rename the hint from a custom name to the
ACLE specified name.
llvm-svn: 207829
|
|
|
|
| |
llvm-svn: 207632
|
|
|
|
| |
llvm-svn: 207401
|
|
|
|
|
|
|
|
|
| |
The __yield intrinsic generates a hint instruction to indicate that the thread
is not performing any useful operations at the moment. This is for
compatibility with MSVC, although, the intrinsic is also part of the ACLE, and
is enabled globally as a result.
llvm-svn: 207275
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We never aka vector types because our attributed syntax for it is less
comprehensible than the typedefs. This leaves the user in the dark when
the typedef isn't named that well.
Example:
v2s v; v4f w;
w = v;
The naming in this cases isn't even that bad, but the error we give is
useless without looking up the actual typedefs.
t.c:6:5: error: assigning to 'v4f' from incompatible type 'v2s'
Now:
t.c:6:5: error: assigning to 'v4f' (vector of 4 'float' values) from
incompatible type 'v2s' (vector of 2 'int' values)
We do this for all diagnostics that print a vector type.
llvm-svn: 207267
|
|
|
|
|
|
|
| |
Use the new generic @llvm.arm.hint hint intrinsic rather than the specialised
@llvm.arm.sevl hint instruction.
llvm-svn: 207243
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch:
1. Adds a definition for two new GCCBuiltins in BuiltinsX86.def:
__builtin_ia32_rdtsc;
__builtin_ia32_rdtscp;
2. Replaces the already existing definition of intrinsic __rdtsc in
ia32intrin.h with a simple call to the new GCC builtin __builtin_ia32_rdtsc.
3. Adds a definition for the new intrinsic __rdtscp in ia32intrin.h
llvm-svn: 207132
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary: The condition in the base class is rather strange. It says a target has the 128-bit integer type if the size of a pointer is >= 64-bits. N32 has 32-bit pointers but 64-bit integers. I'm a bit reluctant to change this for all targets so this patch makes the method virtual and overrides it for MIPS64.
Reviewers: atanasyan
Reviewed By: atanasyan
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D3472
llvm-svn: 207121
|
|
|
|
| |
llvm-svn: 207117
|
|
|
|
| |
llvm-svn: 207062
|
|
|
|
|
|
| |
tests needed changing slightly due to the naming differences between AArch64 and ARM64.
llvm-svn: 206964
|
|
|
|
|
|
|
|
| |
behaviour of Clang/AArch64 and GCC.
GCC allows sub-64bit values to use the 'r' register constraint.
llvm-svn: 206963
|
|
|
|
|
|
| |
This completes the port of r203918 (cpirker "AArch64_be specific clang target settings") to ARM64.
llvm-svn: 206962
|
|
|
|
|
|
|
|
| |
test for arm64_be.
This ensures that r203917 (cpirker "AArch64_be varargs processing for ARM ABI") is ported to ARM64.
llvm-svn: 206961
|
|
|
|
| |
llvm-svn: 206890
|
|
|
|
|
|
|
|
|
|
|
| |
Unlike the standard AAPCS64 ABI, variadic arguments are always passed on the
stack with the Darwin ABI, and this was not being considered when deciding
whether to expand HFA/HVA arguments in a call. An HFA argument with a "float"
base type was being expanded into separate "float" arguments, each of which
was then extended to a double, resulting in a serious mismatch from what is
expected by the va_arg implementation. <rdar://problem/15777067>
llvm-svn: 206729
|
|
|
|
|
|
|
| |
This is one of those DarwinPCS differences. It'd been caught in
arguments, but not return values.
llvm-svn: 206594
|
|
|
|
|
|
| |
Another AAPCS bug, part of PR19432.
llvm-svn: 206580
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The frontend option -fno-optimize-sibling-calls resolves to -cc1's
-mdisable-tail-calls, which is passed to the TargetMachine in the
backend. PassManagerBuilder was adding the -tailcallelim pass anyway.
Use a new DisableTailCalls option in PassManagerBuilder to disable tail
calls harder.
Requires the matching commit in LLVM that adds DisableTailCalls.
<rdar://problem/16050591>
llvm-svn: 206543
|
|
|
|
|
|
|
|
|
|
| |
My first attempt to make sure HFAs were contiguous was in the block dealing
with padding registers, which meant it only triggered on the first stack-based
HFA. This should extend it to the rest as well.
Another part of PR19432.
llvm-svn: 206456
|
|
|
|
|
|
| |
pass -target-feature +neon.
llvm-svn: 206394
|
|
|
|
|
|
|
|
|
| |
This is a partial revert of 183015.
By not recognizing things like _setjmp we lose (returns_twice) attribute on
them, which leads to incorrect code generation.
Fixes PR16138.
llvm-svn: 206362
|