Nico Weber [Wed, 25 Jun 2014 23:55:37 +0000 (23:55 +0000)]
Minor libc++abi changes to make things build better with gcc.
llvm-svn: 211748
Argyrios Kyrtzidis [Wed, 25 Jun 2014 23:54:50 +0000 (23:54 +0000)]
For CrashRecoveryContext::RunSafelyOnThread, propagate Darwin's PRIO_DARWIN_BG to the new thread if it is
set on the calling thread.
This allows libclang's indexing threads to propagate their priority to the clang module building threads.
rdar://
17459872
llvm-svn: 211747
Ben Langmuir [Wed, 25 Jun 2014 23:53:43 +0000 (23:53 +0000)]
Make -Wincomplete-umbrella go through the VFS
By using vfs::recursive_directory_iterator, this warning will now fire
when some or all of a module's headers are from VFS mappings.
llvm-svn: 211746
Nico Weber [Wed, 25 Jun 2014 23:52:07 +0000 (23:52 +0000)]
Update libc++abi to use the ARM EHABI unwinder from its libunwind.
llvm-svn: 211745
Michael Liao [Wed, 25 Jun 2014 23:39:08 +0000 (23:39 +0000)]
Fix typo
llvm-svn: 211744
Nico Weber [Wed, 25 Jun 2014 23:39:00 +0000 (23:39 +0000)]
Land support for ARM EHABI unwinding for libunwind.
This was written by:
Albert Wong <ajwong@chromium.org>
Antoine Labour <piman@chromium.org>
Dana Jansen <danakj@chromium.org
Jonathan Roelofs <jonathan@codesourcery.com>
Nico Weber <thakis@chromium.org>
llvm-svn: 211743
David Blaikie [Wed, 25 Jun 2014 23:19:58 +0000 (23:19 +0000)]
Make PR20038.cpp test case portable to non-Itanium ABIs
The only call in this function is to the dtor, so there's no need to
name a non-portable mangled function name to match it.
llvm-svn: 211742
NAKAMURA Takumi [Wed, 25 Jun 2014 23:13:34 +0000 (23:13 +0000)]
Suppress clang-tidy-diff.py. It is incompatible to py26 due to argparse.
llvm-svn: 211741
Juergen Ributzka [Wed, 25 Jun 2014 22:50:59 +0000 (22:50 +0000)]
[FastISel][X86] More refactoring of select lowering and XALU folding. NFC.
llvm-svn: 211740
Nico Weber [Wed, 25 Jun 2014 22:49:13 +0000 (22:49 +0000)]
Start landing support for ARM EHABI unwinding.
The new code will be behind a LIBCXXABI_ARM_EHABI define (so that platforms
that don't want it can continue using e.g. SJLJ). This commit mostly just
adds the LIBCXXABI_ARM_EHABI define.
llvm-svn: 211739
Alp Toker [Wed, 25 Jun 2014 22:46:44 +0000 (22:46 +0000)]
Remove REQUIRES lines from portable tests
These tests are target-independent and shouldn't ever be suppressed.
llvm-svn: 211738
Eric Christopher [Wed, 25 Jun 2014 22:36:37 +0000 (22:36 +0000)]
The includes were sorted. Revert r210578.
llvm-svn: 211737
Hans Wennborg [Wed, 25 Jun 2014 22:19:48 +0000 (22:19 +0000)]
Don't allow dllimport variables in constant initializers
This is a follow-up to David's r211677. For the following code,
we would end up referring to 'foo' in the initializer for 'arr',
and then fail to link, because 'foo' is dllimport and needs to be
accessed through the __imp_?foo.
__declspec(dllimport) extern const char foo[];
const char* f() {
static const char* const arr[] = { foo };
return arr[0];
}
Differential Revision: http://reviews.llvm.org/D4299
llvm-svn: 211736
Juergen Ributzka [Wed, 25 Jun 2014 22:17:23 +0000 (22:17 +0000)]
[FastISel][X86] Refactor XALU folding. NFC.
llvm-svn: 211735
Sanjay Patel [Wed, 25 Jun 2014 22:15:12 +0000 (22:15 +0000)]
fixed typos in comment
llvm-svn: 211734
Aaron Watry [Wed, 25 Jun 2014 21:08:38 +0000 (21:08 +0000)]
relational: Fix signbit
The vector components were mistakenly using () instead of {}, which caused
all but the last vector component to be dropped on the floor.
Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Jeroen Ketema <j.ketema@imperial.ac.uk>
llvm-svn: 211733
Ben Langmuir [Wed, 25 Jun 2014 20:25:40 +0000 (20:25 +0000)]
Add vfs::recursive_directory_iterator
For now, this is only used by its unit tests. It is similar to the API
in llvm::sys::fs::recursive_directory_iterator, but without some of the
more complex features like requesting that the iterator not recurse into
the next directory, for example.
llvm-svn: 211732
Reid Kleckner [Wed, 25 Jun 2014 20:25:21 +0000 (20:25 +0000)]
Mention that Phabricator users should subscribe to *-commits
This probably explains why a lot of messages get lost for first time
Phabricator users.
llvm-svn: 211731
Juergen Ributzka [Wed, 25 Jun 2014 20:06:12 +0000 (20:06 +0000)]
[FastISel][X86] Only fold the cmp into the select when both instructions are in the same basic block.
If the cmp is in a different basic block, then it is possible that not all
operands of that compare have defined registers. This can happen when one of
the operands to the cmp is a load and the load gets folded into the cmp. In
this case FastISel will skip the load instruction and the vreg is never
defined.
llvm-svn: 211730
Zachary Turner [Wed, 25 Jun 2014 18:40:58 +0000 (18:40 +0000)]
Fix silly compilation error.
llvm-svn: 211728
Rafael Espindola [Wed, 25 Jun 2014 18:37:33 +0000 (18:37 +0000)]
Merge the used symbol scanning of MCObjectStreamer and RecordStreamer.
This completes the refactoring of RecordStreamer.
llvm-svn: 211727
Zachary Turner [Wed, 25 Jun 2014 18:37:19 +0000 (18:37 +0000)]
Fix a bug in the IRMemoryMap which generated bogus allocations.
Previously, only the starting locations of the candidate interval
and the existing interval were compared. To correctly detect
range intersections, it is necessary to compare the entire range
of both intervals against each other.
Reviewed by: scallanan
Differential Revision: http://reviews.llvm.org/D4286
llvm-svn: 211726
Hans Wennborg [Wed, 25 Jun 2014 18:25:57 +0000 (18:25 +0000)]
MS ABI: Propagate class-level DLL attributes to class template specialization bases (PR11170)
Consider the following code:
template <typename T> class Base {};
class __declspec(dllexport) class Derived : public Base<int> {}
When the base of an exported or imported class is a class template
specialization, MSVC will propagate the dll attribute to the base.
In the example code, Base<int> becomes a dllexported class.
This commit makes Clang do the proopagation when the base hasn't been
instantiated yet, and warns about it being unsupported otherwise.
This is different from MSVC, which allows changing a specialization
back and forth between dllimport and dllexport and seems to let the
last one win. Changing the dll attribute after instantiation would be
hard for us, and doesn't seem to come up in practice, so I think this
is a reasonable limitation to have.
MinGW doesn't do this kind of propagation.
Differential Revision: http://reviews.llvm.org/D4264
llvm-svn: 211725
David Blaikie [Wed, 25 Jun 2014 18:20:54 +0000 (18:20 +0000)]
Revert "PR20038: DebugInfo: Inlined call sites where the caller has debug info but the call itself has no debug location."
This reverts commit r211723.
Breaks the ASan/compiler-rt build... guess I didn't test very far at all
:/.
llvm-svn: 211724
David Blaikie [Wed, 25 Jun 2014 18:03:10 +0000 (18:03 +0000)]
PR20038: DebugInfo: Inlined call sites where the caller has debug info but the call itself has no debug location.
This situation does bad things when inlined, so I've fixed Clang not to
produce inlinable call sites without locations when the caller has debug
info (in the one case where I could find that this occurred). This
updates the PR20038 test case to be what clang now produces, and readds
the assertion that had to be removed due to this bug.
I've also beefed up the debug info verifier to help diagnose these
issues in the future, and I hope to add checks to the inliner to just
assert-fail if it encounters this situation. If, in the future, we
decide we have to cope with this situation, the right thing to do is
probably to just remove all the DebugLocs from the inlined instructions.
llvm-svn: 211723
David Blaikie [Wed, 25 Jun 2014 17:57:34 +0000 (17:57 +0000)]
PR20038: DebugInfo: Call sites without DebugLocs for temporary dtors after a conditional
With && at the top level of an expression, the last thing done when
emitting the expression was an unconditional jump to the cleanup block.
To reduce the amount of stepping, the DebugLoc is omitted from the
unconditional jump. This is done by clearing the IRBuilder's
"CurrentDebugLocation"*. If this is not set to some non-empty value
before the cleanup block is emitted, the cleanups don't get a location
either. If a call without a location is emitted in a function with debug
info, and that call is then inlined - bad things happen. (without a
location for the call site, the inliner would just leave the inlined
DebugLocs as they were - pointing to roots in the original function, not
inlined into the current function)
Follow up commit to LLVM will ensure that breaking the invariants of the
DebugLoc chains by having chains that don't lead to the current function
will fail assertions, so we shouldn't accidentally slip any of these
cases in anymore. Those assertions may reveal further cases that need to
be fixed in clang, though I've tried to test heavily to avoid that.
* See r128471, r128513 for the code that clears the
CurrentDebugLocation. Simply removing this code or moving the code
into IRBuilder to apply to all unconditional branches would regress
desired behavior, unfortunately.
llvm-svn: 211722
Tyler Nowicki [Wed, 25 Jun 2014 17:50:15 +0000 (17:50 +0000)]
Add Rpass-missed and Rpass-analysis reports to the loop vectorizer. The remarks give the vector width of vectorized loops and a brief analysis of loops that fail to be vectorized. For example, an analysis will be generated for loops containing control flow that cannot be simplified to a select. The optimization remarks also give the debug location of expressions that cannot be vectorized, for example the location of an unvectorizable call.
Reviewed by: Arnold Schwaighofer
llvm-svn: 211721
Andrea Di Biagio [Wed, 25 Jun 2014 17:41:58 +0000 (17:41 +0000)]
[X86] Always prefer to lower a VECTOR_SHUFFLE into a BLENDI instead of SHUFP (or VPERM2X128).
This patch teaches method 'LowerVECTOR_SHUFFLE' to give higher precedence to
the check for 'isBlendMask'; the idea is that, when possible, we should firstly
check if a shuffle performs a blend, and in case, try to lower it into a BLENDI
instead of selecting a SHUFP or (worse) a VPERM2X128.
In general:
- AVX VBLENDPS/D always have better latency and throughput than VPERM2F128;
- BLENDPS/D instructions tend to always have better 'reciprocal throughput'
than the equivalent SHUFPS/D;
- Both BLENDPS/D and SHUFPS/D are often decoded into the same number of
m-ops; however, a m-op obtained from a BLENDPS/D can be scheduled to more
than one execution port.
This patch:
- Moves the check for 'isBlendMask' immediately before the check for
'isSHUFPMask' within method 'LowerVECTOR_SHUFFLE';
- Updates existing tests for sse/avx shuffle/blend instructions to verify
that we select (v)blendps/d when possible (instead of (v)shufps/d or
vperm2f128).
llvm-svn: 211720
Serge Pavlov [Wed, 25 Jun 2014 17:09:41 +0000 (17:09 +0000)]
Fix treatment of types defined in function prototype
Types defined in function prototype are diagnosed earlier in C++ compilation.
They are put into declaration context where the prototype is introduced. Later on,
when FunctionDecl object is created, these types are moved into the function context.
This patch fixes PR19018 and PR18963.
Differential Revision: http://reviews.llvm.org/D4145
llvm-svn: 211718
Juergen Ributzka [Wed, 25 Jun 2014 16:49:37 +0000 (16:49 +0000)]
Fix indentation.
llvm-svn: 211717
Saleem Abdulrasool [Wed, 25 Jun 2014 16:48:40 +0000 (16:48 +0000)]
Headers: be a bit more careful about inline asm
Conditionally include x86intrin.h if we are building for x86 or x86_64.
Conditionalise definition of inline assembly routines which use x86 or x86_64
inline assembly. This is needed as clang can target Windows on ARM where these
definitions may be included into user code.
llvm-svn: 211716
Rafael Espindola [Wed, 25 Jun 2014 15:47:36 +0000 (15:47 +0000)]
Fix the build.
llvm-svn: 211715
Rafael Espindola [Wed, 25 Jun 2014 15:45:33 +0000 (15:45 +0000)]
Move expression visitation logic up to MCStreamer.
Remove the duplicate from MCRecordStreamer. No functionality change.
llvm-svn: 211714
Alexander Potapenko [Wed, 25 Jun 2014 15:43:19 +0000 (15:43 +0000)]
[ASan] When iterating over segments on OSX, treat the segments' initial
protection level as their current protection level.
This fixes the UNIMPLEMENTED check that started to fire on OSX after r210649.
llvm-svn: 211713
Eli Bendersky [Wed, 25 Jun 2014 15:42:16 +0000 (15:42 +0000)]
Rename loop unrolling and loop vectorizer metadata to have a common prefix.
[Clang part]
These patches rename the loop unrolling and loop vectorizer metadata
such that they have a common 'llvm.loop.' prefix. Metadata name
changes:
llvm.vectorizer.* => llvm.loop.vectorizer.*
llvm.loopunroll.* => llvm.loop.unroll.*
This was a suggestion from an earlier review
(http://reviews.llvm.org/D4090) which added the loop unrolling
metadata.
Patch by Mark Heffernan.
llvm-svn: 211712
Eli Bendersky [Wed, 25 Jun 2014 15:41:39 +0000 (15:41 +0000)]
Add some test files for r211710.
llvm-svn: 211711
Eli Bendersky [Wed, 25 Jun 2014 15:41:00 +0000 (15:41 +0000)]
Rename loop unrolling and loop vectorizer metadata to have a common prefix.
[LLVM part]
These patches rename the loop unrolling and loop vectorizer metadata
such that they have a common 'llvm.loop.' prefix. Metadata name
changes:
llvm.vectorizer.* => llvm.loop.vectorizer.*
llvm.loopunroll.* => llvm.loop.unroll.*
This was a suggestion from an earlier review
(http://reviews.llvm.org/D4090) which added the loop unrolling
metadata.
Patch by Mark Heffernan.
llvm-svn: 211710
JF Bastien [Wed, 25 Jun 2014 15:38:02 +0000 (15:38 +0000)]
Fix = delete in MSVC build from r211705
MSVC doesn't support = delete yet, use LLVM_DELETED_FUNCTION instead.
Related to: http://reviews.llvm.org/D3390
llvm-svn: 211709
Alexander Kornienko [Wed, 25 Jun 2014 15:33:35 +0000 (15:33 +0000)]
Rolling back, as the test fails on one of the buildbots:
http://lab.llvm.org:8011/builders/clang-hexagon-elf/builds/13505/steps/check-all/logs/Clang%20Tools%3A%3Ac-style-casts.cpp
llvm-svn: 211708
Rafael Espindola [Wed, 25 Jun 2014 15:29:54 +0000 (15:29 +0000)]
Simplify the visitation of target expressions. No functionality change.
llvm-svn: 211707
JF Bastien [Wed, 25 Jun 2014 15:21:42 +0000 (15:21 +0000)]
Random Number Generator (llvm)
Provides an abstraction for a random number generator (RNG) that produces a stream of pseudo-random numbers.
The current implementation uses C++11 facilities and is therefore not cryptographically secure.
The RNG is salted with the text of the current command line invocation.
In addition, a user may specify a seed (reproducible builds).
In clang, the seed can be set via
-frandom-seed=X
In the back end, the seed can be set via
-rng-seed=X
This is the llvm part of the patch.
clang part: D3391
URL: http://reviews.llvm.org/D3390
Author: yln
I'm landing this for the second time, it broke Windows bots the first time around.
llvm-svn: 211705
Tim Northover [Wed, 25 Jun 2014 15:12:55 +0000 (15:12 +0000)]
[mach-o]: make sure custom sort method is irreflexive.
The previous function returned true for "s < s", which could completely mess up
the sorting of symbols within a section.
Unfortunately, I don't think there's a robust way to write a test for this.
Anything I come up with will be making assumptions about the particular
implementation of std::sort.
llvm-svn: 211704
Alexander Kornienko [Wed, 25 Jun 2014 14:56:58 +0000 (14:56 +0000)]
Apparently, some versions of diff like -U0 more than -u0.
llvm-svn: 211703
Alexander Kornienko [Wed, 25 Jun 2014 14:52:44 +0000 (14:52 +0000)]
Add a check to flag the usage of C-style casts (Google Style).
Summary:
Add a check to flag the usage of C-style casts, as per Google Style
Guide:
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Casting#Casting
Reviewers: djasper
Reviewed By: djasper
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D4189
llvm-svn: 211702
Rafael Espindola [Wed, 25 Jun 2014 14:42:14 +0000 (14:42 +0000)]
Simplify AddValueSymbols. No functionality change.
llvm-svn: 211701
Evgeniy Stepanov [Wed, 25 Jun 2014 14:41:57 +0000 (14:41 +0000)]
[msan] Fix bad interaction between with-calls mode and chained origin tracking.
Origin history should only be recorded for uninitialized values, because it is
meaningless otherwise. This change moves __msan_chain_origin to the runtime
library side and makes it conditional on the corresponding shadow value.
Previous code was correct, but _very_ inefficient.
llvm-svn: 211700
Rafael Espindola [Wed, 25 Jun 2014 14:35:59 +0000 (14:35 +0000)]
Don't leak a file descriptor.
llvm-svn: 211699
Alexander Kornienko [Wed, 25 Jun 2014 14:09:52 +0000 (14:09 +0000)]
Add clang-tidy-diff.py script to run clang-tidy and display warnings on changed lines only.
Reviewers: djasper
Reviewed By: djasper
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D4288
llvm-svn: 211698
Logan Chien [Wed, 25 Jun 2014 13:46:17 +0000 (13:46 +0000)]
Code cleanup.
llvm-svn: 211697
Aaron Watry [Wed, 25 Jun 2014 13:29:23 +0000 (13:29 +0000)]
relational: Implement signbit
v2 Changes:
- use __builtin_signbit instead of shifting by hand
- significantly improve vector shuffling
- Works correctly now for signbit(float16) on radeonsi
Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 211696
Chandler Carruth [Wed, 25 Jun 2014 13:13:36 +0000 (13:13 +0000)]
Add Polly to the ignored trees.
llvm-svn: 211695
Chandler Carruth [Wed, 25 Jun 2014 13:12:54 +0000 (13:12 +0000)]
[x86] Add intrinsics for the pshufd, pshuflw, and pshufhw instructions.
llvm-svn: 211694
Aaron Ballman [Wed, 25 Jun 2014 12:49:05 +0000 (12:49 +0000)]
Fixing the RST markup for the #pragma loop attribute documentation.
llvm-svn: 211693
Aaron Ballman [Wed, 25 Jun 2014 12:48:06 +0000 (12:48 +0000)]
Fixing the position of the supported syntax marker when generating attribute documentation.
llvm-svn: 211692
NAKAMURA Takumi [Wed, 25 Jun 2014 12:41:52 +0000 (12:41 +0000)]
Re-apply r211399, "Generate native unwind info on Win64" with a fix to ignore SEH pseudo ops in X86 JIT emitter.
--
This patch enables LLVM to emit Win64-native unwind info rather than
DWARF CFI. It handles all corner cases (I hope), including stack
realignment.
Because the unwind info is not flexible enough to describe stack frames
with a gap of unknown size in the middle, such as the one caused by
stack realignment, I modified register spilling code to place all spills
into the fixed frame slots, so that they can be accessed relative to the
frame pointer.
Patch by Vadim Chugunov!
Reviewed By: rnk
Differential Revision: http://reviews.llvm.org/D4081
llvm-svn: 211691
Aaron Ballman [Wed, 25 Jun 2014 12:41:28 +0000 (12:41 +0000)]
Escaping a literal character to fix an RST warning.
llvm-svn: 211690
NAKAMURA Takumi [Wed, 25 Jun 2014 12:40:56 +0000 (12:40 +0000)]
Reformat.
llvm-svn: 211689
Alexey Volkov [Wed, 25 Jun 2014 12:15:36 +0000 (12:15 +0000)]
Align with new GCC options for x86 Android
32-bit: +ssse3
64-bit: +sse4.2 +popcnt
Differential Revision: http://reviews.llvm.org/D4287
llvm-svn: 211688
James Molloy [Wed, 25 Jun 2014 11:50:56 +0000 (11:50 +0000)]
CHECK-LABEL'ify this test.
llvm-svn: 211687
James Molloy [Wed, 25 Jun 2014 11:46:24 +0000 (11:46 +0000)]
[AArch32] Fix a stupid error in an architectural guard
The < 8 instead of <= 8 meant that a bunch of vreinterprets were not available on v8 AArch32. Simplify the guard to just !defined(aarch64) while we're at it, and enable some v8 AArch32 testing.
llvm-svn: 211686
Alexey Bataev [Wed, 25 Jun 2014 11:44:49 +0000 (11:44 +0000)]
[OPENMP] Initial support for 'sections' directive.
llvm-svn: 211685
Evgeniy Stepanov [Wed, 25 Jun 2014 11:43:46 +0000 (11:43 +0000)]
[sanitizer] Fix build on platforms where dtls support is disabled.
llvm-svn: 211684
Evgeniy Stepanov [Wed, 25 Jun 2014 11:30:35 +0000 (11:30 +0000)]
[msan] Fix false positive on dynamic tls.
Use existing DTLS code in sanitizer_tls_get_addr.{h,cc} to unpoison DTLS
blocks both on allocation and deallocation.
https://code.google.com/p/memory-sanitizer/issues/detail?id=44
llvm-svn: 211683
Tim Northover [Wed, 25 Jun 2014 11:21:51 +0000 (11:21 +0000)]
[mach-o]: atomize zero-terminated literals correctly.
When looking through sections with zero-terminated string-literals (__cstring
or __ustring) we were constantly rechecking the first few bytes of the string
for '\0' rather than advancing along. This obviously failed unless all strings
within the section had the same length as that first one.
llvm-svn: 211682
Tim Northover [Wed, 25 Jun 2014 10:59:37 +0000 (10:59 +0000)]
[mach-o] don't assume all sections have symbols
We were trying to examine the first symbol in a section that we wanted to
atomize by symbols, even when there wasn't one. Instead, we should make the
initial anonymous symbol cover the entire section in that situation.
llvm-svn: 211681
Jeroen Ketema [Wed, 25 Jun 2014 10:06:35 +0000 (10:06 +0000)]
Add exp10
Reviewed-by: Tom Stellard <tom@stellard.net>
llvm-svn: 211680
Andrea Di Biagio [Wed, 25 Jun 2014 10:02:21 +0000 (10:02 +0000)]
[X86] Add target combine rule to select ADDSUB instructions from a build_vector
This patch teaches the backend how to combine a build_vector that implements
an 'addsub' between packed float vectors into a sequence of vector add
and vector sub followed by a VSELECT.
The new VSELECT is expected to be lowered into a BLENDI.
At ISel stage, the sequence 'vector add + vector sub + BLENDI' is
pattern-matched against ISel patterns added at r211427 to select
'addsub' instructions.
Added three more ISel patterns for ADDSUB.
Added test sse3-avx-addsub-2.ll to verify that we correctly emit 'addsub'
instructions.
llvm-svn: 211679
Evgeniy Stepanov [Wed, 25 Jun 2014 09:17:21 +0000 (09:17 +0000)]
Factor out part of LICM::sink into a helper function.
llvm-svn: 211678
David Majnemer [Wed, 25 Jun 2014 08:15:07 +0000 (08:15 +0000)]
AST: Initialization with dllimport functions in C
The C++ language requires that the address of a function be the same
across all translation units. To make __declspec(dllimport) useful,
this means that a dllimported function must also obey this rule. MSVC
implements this by dynamically querying the import address table located
in the linked executable. This means that the address of such a
function in C++ is not constant (which violates other rules).
However, the C language has no notion of ODR nor does it permit dynamic
initialization whatsoever. This requires implementations to _not_
dynamically query the import address table and instead utilize a wrapper
function that will be synthesized by the linker which will eventually
query the import address table. The effect this has is, to say the
least, perplexing.
Consider the following C program:
__declspec(dllimport) void f(void);
typedef void (*fp)(void);
static const fp var = &f;
const fp fun() { return &f; }
int main() { return fun() == var; }
MSVC will statically initialize "var" with the address of the wrapper
function and "fun" returns the address of the actual imported function.
This means that "main" will return false!
Note that LLVM's optimizers are strong enough to figure out that "main"
should return true. However, this result is dependent on having
optimizations enabled!
N.B. This change also permits the usage of dllimport declarators inside
of template arguments; they are sufficiently constant for such a
purpose. Add tests to make sure we don't regress here.
llvm-svn: 211677
Alexander Kornienko [Wed, 25 Jun 2014 08:09:35 +0000 (08:09 +0000)]
Added a test to ensure -Wimplicit-fallthrough works with -fblocks correctly.
llvm-svn: 211676
Alexey Volkov [Wed, 25 Jun 2014 08:04:58 +0000 (08:04 +0000)]
Fix unresolved symbols when loading gold plugin
Differential Revision: http://reviews.llvm.org/D4275
llvm-svn: 211675
Simon Atanasyan [Wed, 25 Jun 2014 07:55:55 +0000 (07:55 +0000)]
[ELF] Add two new virtual functions to the `OutputELFWriter` class to control
dynamic symbol table populating and DT_NEEDED tag creation.
The `isDynSymEntryRequired` function returns true if the specified shared
library atom requires a dynamic symbol table entry. The `isNeededTagRequired`
function returns true if we need to create DT_NEEDED tag for the shared
library defined specified shared atom.
By default the both functions return true. So there is no functional changes
for all targets except MIPS. Probably we need to spread the same modifications
on other ELF targets but I want to implement and fully tested complete set of
changes for MIPS target first.
For MIPS we create a dynamic symbol table entry for a shared library atom iif
this atom is referenced by a regular defined atom. For example, if library L1
defines symbol T1, library L2 defines symbol T2 and uses symbol T1
and executable file E1 uses symbol T2 but does not use symbol T1 we create
an entry in the E1 dynamic symbol table for symbol T2 and do not create
an entry for T1.
The patch creates DT_NEEDED tags for shared libraries contain shared library
atoms which a) referenced by regular defined atoms; b) have corresponding
copy dynamic relocations (R_MIPS_COPY).
Now the patch does not take in account --as-needed / --no-as-needed command
line options. So it is too restrictive and create DT_NEEDED tags for really
needed shared libraries only. I plan to fix that by subsequent patches.
llvm-svn: 211674
Evgeniy Stepanov [Wed, 25 Jun 2014 07:54:58 +0000 (07:54 +0000)]
[LICM] Don't create more than one copy of an instruction per loop exit block when sinking.
Fixes exponential compilation complexity in PR19835, caused by
LICM::sink not handling the following pattern well:
f = op g
e = op f, g
d = op e
c = op d, e
b = op c
a = op b, c
When an instruction with N uses is sunk, each of its operands gets N
new uses (all of them - phi nodes). In the example above, if a had 1
use, c would have 2, e would have 4, and g would have 8.
llvm-svn: 211673
Alexey Bataev [Wed, 25 Jun 2014 06:52:00 +0000 (06:52 +0000)]
[OPENMP] OMPSimdDirective and OMPForDirective: added initialization for CollapsedNum member.
llvm-svn: 211672
Tobias Grosser [Wed, 25 Jun 2014 06:38:18 +0000 (06:38 +0000)]
test/ScopInfo: Remove %defaultOpts and list passes explicitly
Due to bad habit we sometimes used a variable %defaultOpts that listed
a set of passes commonly run to prepare for Polly. None of these test cases
actually needs special preparation and only two of them need the 'basicaa' to
be scheduled. Scheduling the required alias analysis explicitly makes the test
cases clearer.
llvm-svn: 211671
Tobias Grosser [Wed, 25 Jun 2014 06:31:19 +0000 (06:31 +0000)]
Clean up XFAILed test cases
We had a set of test cases that have been incomplete and XFAILED. This patch
completes a couple of the interesting ones and removes the ones which seem
redundant or not sufficiently reduced to be useful.
llvm-svn: 211670
Zachary Turner [Wed, 25 Jun 2014 05:42:32 +0000 (05:42 +0000)]
Replace GCC-specific intrinsic with portable alternative.
Not all supported compilers have GCC intrinsics, so this patch
uses the correct portable alternative.
Additionally, this patch fixes an off-by-one error. __builtin_ffs
returns the 1-based index of the least-significant 1-bit, but the
function expects the base 2 logarithm of the number, which is
equivalent to the 0-based index of the least-significant 1-bit.
Reviewed by: Keno Fischer
Differential Revision: http://reviews.llvm.org/D4284
llvm-svn: 211669
Rafael Espindola [Wed, 25 Jun 2014 05:37:58 +0000 (05:37 +0000)]
Fix another asserting method in the null streamer.
llvm-svn: 211668
Zachary Turner [Wed, 25 Jun 2014 05:37:25 +0000 (05:37 +0000)]
Don't go through the TypeSourceInfo when getting the SourceRange.
VarDecl provides a method getSourceRange(), which provides a more
robust way of getting the SourceRange since the TypeSourceInfo can
be null in certain cases.
Reviewed by: majnemer
Differential Revision: http://reviews.llvm.org/D4281
llvm-svn: 211667
Rafael Espindola [Wed, 25 Jun 2014 05:31:22 +0000 (05:31 +0000)]
Fix a regression from r211653.
The method was empty in the null streamer but I mistakenly replaced it with
the aborting one in MCStreamer.
llvm-svn: 211666
Simon Atanasyan [Wed, 25 Jun 2014 05:00:59 +0000 (05:00 +0000)]
[Driver] Follow-up to r211598, r211663. Do not build a dynamic linker
path using sub-strings concatenation. Return the whole string explicitly.
llvm-svn: 211665
NAKAMURA Takumi [Wed, 25 Jun 2014 04:34:36 +0000 (04:34 +0000)]
MCNullStreamer.cpp: Roll back a few empty methods that have been marked as unreachable in MCStreamer.cpp.
void EmitCOFFSecRel32(MCSymbol const *Symbol) override {}
void EmitGPRel32Value(const MCExpr *Value) override {}
It should fix crash like "llc -mtriple=i686-cygwin -filetype=null".
llvm-svn: 211664
NAKAMURA Takumi [Wed, 25 Jun 2014 04:34:20 +0000 (04:34 +0000)]
Tools.cpp: Update getLinuxDynamicLinker() to return Twine instead of StringRef, since r211598 has introduced manipulation of return string.
llvm-svn: 211663
NAKAMURA Takumi [Wed, 25 Jun 2014 04:34:10 +0000 (04:34 +0000)]
VirtualFileSystemTest.cpp: Get rid of initializer list on std::vector, to appease msc17.
llvm-svn: 211662
NAKAMURA Takumi [Wed, 25 Jun 2014 04:34:00 +0000 (04:34 +0000)]
Reformat.
llvm-svn: 211661
Alexey Bataev [Wed, 25 Jun 2014 04:09:13 +0000 (04:09 +0000)]
[OPENMP] Improved code and replaced struct by lambda.
llvm-svn: 211660
NAKAMURA Takumi [Wed, 25 Jun 2014 03:05:47 +0000 (03:05 +0000)]
CodeGen/X86/pr20088.ll: Add -march=x86-64, or llc fails due to non-x86 default target.
llvm-svn: 211659
Jim Ingham [Wed, 25 Jun 2014 02:32:56 +0000 (02:32 +0000)]
Added an option to turn OFF the "detach on error" behavior that was added
to debugserver when launching processes.
<rdar://problem/
16216199>
llvm-svn: 211658
JF Bastien [Wed, 25 Jun 2014 01:31:33 +0000 (01:31 +0000)]
Implement predefined stdint macros
Add predefined stdint macros that match the given patterns:
U?INT{_,_FAST,_LEAST}{8,16,32,64}_{MAX,TYPE}
U?INT{PTR,MAX}_{MAX,TYPE}
http://reviews.llvm.org/D4141
Author: binji
llvm-svn: 211657
Alp Toker [Wed, 25 Jun 2014 00:41:15 +0000 (00:41 +0000)]
Use SourceMgr::getMemoryBuffer() in a couple of places
Cleanup only.
llvm-svn: 211656
Ed Maste [Wed, 25 Jun 2014 00:38:35 +0000 (00:38 +0000)]
Remove extra newline from log Printf
Clean up this one specifically, as it has the effect of double-spacing
the list of thread stop reasons, and substantially bloats the log file
when opening a core with hundreds of threads.
There are other cases of extra newlines. Some of them do increase
readability, so avoid a general sweep for now.
llvm-svn: 211655
Reid Kleckner [Wed, 25 Jun 2014 00:28:35 +0000 (00:28 +0000)]
Fix parsing nested __if_exists blocks
Rather than having kw___if_exists be a special case of
ParseCompoundStatementBody, we can look for kw___if_exists in the big
switch over for valid statement tokens in ParseStatementOrDeclaration.
Nested __if_exists blocks are used in the DECLARE_REGISTRY_RESOURCEID
macro from atlcom.h.
llvm-svn: 211654
Rafael Espindola [Wed, 25 Jun 2014 00:27:53 +0000 (00:27 +0000)]
Move some trivial methods up to MCStreamer.
This saves some duplicated boilerplate in RecordStreamer and NullStreamer.
llvm-svn: 211653
Lang Hames [Wed, 25 Jun 2014 00:20:53 +0000 (00:20 +0000)]
[RuntimeDyld] Adds the necessary hooks to MCJIT to be able to debug generated
MachO files using the GDB JIT debugging interface.
Patch by Keno Fischer. Thanks Keno!
llvm-svn: 211652
Rafael Espindola [Wed, 25 Jun 2014 00:13:59 +0000 (00:13 +0000)]
Simplify the handling of .cfi_endproc.
No functionality change.
llvm-svn: 211651
Reid Kleckner [Wed, 25 Jun 2014 00:10:50 +0000 (00:10 +0000)]
Add a missing test for the __if_exists extension
MSVC does not create a new scope for the body of an __if_exists compound
statement. Clang already gets this right today, but it was untested.
llvm-svn: 211650
Reid Kleckner [Wed, 25 Jun 2014 00:08:10 +0000 (00:08 +0000)]
Split tests for __if_exists out into their own file
llvm-svn: 211649
Hans Wennborg [Tue, 24 Jun 2014 23:57:13 +0000 (23:57 +0000)]
MS ABI: Ignore dll attributes on partial template specializations
llvm-svn: 211648
Hans Wennborg [Tue, 24 Jun 2014 23:57:05 +0000 (23:57 +0000)]
Merge handleDLLImportAttr and handleDLLExportAttr into one function.
llvm-svn: 211647
Rafael Espindola [Tue, 24 Jun 2014 23:54:40 +0000 (23:54 +0000)]
Simplify EmitLabel.
All the "real" streamers were already calling to MCStreamer::EmitLabel
to do part of the work.
llvm-svn: 211646