oota-llvm.git
9 years agoFix PR22408 - LLVM producing AArch64 TLS relocations that GNU linkers cannot handle...
Kristof Beyls [Wed, 4 Mar 2015 09:12:08 +0000 (09:12 +0000)]
Fix PR22408 - LLVM producing AArch64 TLS relocations that GNU linkers cannot handle yet.

As is described at http://llvm.org/bugs/show_bug.cgi?id=22408, the GNU linkers
ld.bfd and ld.gold currently only support a subset of the whole range of AArch64
ELF TLS relocations. Furthermore, they assume that some of the code sequences to
access thread-local variables are produced in a very specific sequence.
When the sequence is not as the linker expects, it can silently mis-relaxe/mis-optimize
the instructions.
Even if that wouldn't be the case, it's good to produce the exact sequence,
as that ensures that linkers can perform optimizing relaxations.

This patch:

* implements support for 16MiB TLS area size instead of 4GiB TLS area size. Ideally clang
  would grow an -mtls-size option to allow support for both, but that's not part of this patch.
* by default doesn't produce local dynamic access patterns, as even modern ld.bfd and ld.gold
  linkers do not support the associated relocations. An option (-aarch64-elf-ldtls-generation)
  is added to enable generation of local dynamic code sequence, but is off by default.
* makes sure that the exact expected code sequence for local dynamic and general dynamic
  accesses is produced, by making use of a new pseudo instruction. The patch also removes
  two (AArch64ISD::TLSDESC_BLR, AArch64ISD::TLSDESC_CALL) pre-existing AArch64-specific pseudo
  SDNode instructions that are superseded by the new one (TLSDESC_CALLSEQ).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231227 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[Tablegen] Use correct result number variables with the pattern nodes they go with...
Craig Topper [Wed, 4 Mar 2015 09:04:54 +0000 (09:04 +0000)]
[Tablegen] Use correct result number variables with the pattern nodes they go with when handling SDTCisSameAs. No functional change as they are always both 0 unless you try to define a multi result type profile that uses SDTCisSame on one of the other results.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231226 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoExplicitly default DenseMapTest::CtorTest::operator=
David Blaikie [Wed, 4 Mar 2015 07:57:45 +0000 (07:57 +0000)]
Explicitly default DenseMapTest::CtorTest::operator=

Using the implicit default copy assignment operator in the presence of a
user-declared copy ctor is deprecated in C++11.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231225 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove explicit RNSuccIterator copy assignment in favor of implicit default
David Blaikie [Wed, 4 Mar 2015 07:51:50 +0000 (07:51 +0000)]
Remove explicit RNSuccIterator copy assignment in favor of implicit default

Asserting that the source and destination iterators are from the same
region is unnecessary - there's no reason to disallow reassignment from
any regions, so long as they aren't compared.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231224 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agouse = default instead of {}
David Blaikie [Wed, 4 Mar 2015 07:35:04 +0000 (07:35 +0000)]
use = default instead of {}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231223 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake format_object_base explicitly copyable, so format_objects can be copied without...
David Blaikie [Wed, 4 Mar 2015 07:35:02 +0000 (07:35 +0000)]
Make format_object_base explicitly copyable, so format_objects can be copied without relying on the implicit copy ctor

Use of the implicit copy ctor is deprecated in C++11 in the presence of
a user declared dtor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231222 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDevirtualize ~parser<T> by making it protected in base classes and making derived...
David Blaikie [Wed, 4 Mar 2015 07:29:01 +0000 (07:29 +0000)]
Devirtualize ~parser<T> by making it protected in base classes and making derived classes final

These objects are never owned/destroyed polymorphically, so there's no
need for a virtual dtor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231221 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAvoid copying parser objects
David Blaikie [Wed, 4 Mar 2015 07:28:59 +0000 (07:28 +0000)]
Avoid copying parser objects

Use of their copy members is deprecated since they have a user-declared
dtor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231220 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[DAGCombine] Fix a bug in a BUILD_VECTOR combine
Michael Kuperstein [Wed, 4 Mar 2015 07:27:39 +0000 (07:27 +0000)]
[DAGCombine] Fix a bug in a BUILD_VECTOR combine

When trying to convert a BUILD_VECTOR into a shuffle, we try to split a single source vector that is twice as wide as the destination vector.
We can not do this when we also need the zero vector to create a blend.
This fixes PR22774.

Differential Revision: http://reviews.llvm.org/D8040

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231219 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake OptionValue explicitly copyable
David Blaikie [Wed, 4 Mar 2015 07:09:53 +0000 (07:09 +0000)]
Make OptionValue explicitly copyable

Since OptionValue (& its base classes) have user-declared dtors, use of
the implicit copy ctor/assignment operator is deprecated in C++11.
Provide them explicitly (defaulted) to avoid depending on this
deprecated feature.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231218 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDevirtualize OptionValue::~OptionValue in favor of protected in the base, with final...
David Blaikie [Wed, 4 Mar 2015 06:57:14 +0000 (06:57 +0000)]
Devirtualize OptionValue::~OptionValue in favor of protected in the base, with final derived classes

These objects are never polymorphically owned, so there's no need for
virtual dtors - just make the dtor protected in the base classes, and
make the derived classes final.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231217 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[MC][Target] Implement support for R_X86_64_SIZE{32,64}.
Davide Italiano [Wed, 4 Mar 2015 06:49:39 +0000 (06:49 +0000)]
[MC][Target] Implement support for R_X86_64_SIZE{32,64}.

Differential Revision: D7990
Reviewed by: rafael, majnemer

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231216 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[llvm-pdbdump] Display full enum definitions.
Zachary Turner [Wed, 4 Mar 2015 06:09:53 +0000 (06:09 +0000)]
[llvm-pdbdump] Display full enum definitions.

This will now display enum definitions both at the global
scope as well as nested inside of classes.  Additionally,
it will no longer display enums at the global scope if the
enum is nested.  Instead, it will omit the definition of
the enum globally and instead emit it in the corresponding
class definition.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231215 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "[ADT] fail-fast iterators for DenseMap"
Chaoren Lin [Wed, 4 Mar 2015 06:05:37 +0000 (06:05 +0000)]
Revert "[ADT] fail-fast iterators for DenseMap"

This reverts commit 4b7263d855006988854036b4a4891fcf19aebe65.

r231125 http://reviews.llvm.org/D7931

This was causing many LLDB tests to fail on OS X, Linux, and FreeBSD.

https://bpaste.net/show/6a23e1f53623

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231214 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove emitDIE and emitAbbrevs to AsmPrinter. NFC.
Frederic Riss [Wed, 4 Mar 2015 02:30:17 +0000 (02:30 +0000)]
Move emitDIE and emitAbbrevs to AsmPrinter. NFC.

(They are called emitDwarfDIE and emitDwarfAbbrevs in their new home)

llvm-dsymutil wants to reuse that code, but it doesn't have a DwarfUnit or
a DwarfDebug object to call those. It has access to an AsmPrinter though.

Having emitDIE in the AsmPrinter also removes the DwarfFile dependency
on DwarfDebug, and thus the patch drops that field.

Differential Revision: http://reviews.llvm.org/D8024

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231210 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoConstify AsmPrinter passed to DIE methods.
Frederic Riss [Wed, 4 Mar 2015 02:30:08 +0000 (02:30 +0000)]
Constify AsmPrinter passed to DIE methods.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231209 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix the test for r231201. We don't crash anymore.
Filipe Cabecinhas [Wed, 4 Mar 2015 02:09:40 +0000 (02:09 +0000)]
Fix the test for r231201. We don't crash anymore.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231207 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoWorkaround MSVC not providing implicit move members
David Blaikie [Wed, 4 Mar 2015 02:07:51 +0000 (02:07 +0000)]
Workaround MSVC not providing implicit move members

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231204 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoObject: Add range iterators to Archive symbols
Rui Ueyama [Wed, 4 Mar 2015 02:05:06 +0000 (02:05 +0000)]
Object: Add range iterators to Archive symbols

Also define operator* for symbol iterator just like Archive children iterator.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231203 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoUse report_fatal_error instead of unreachable for -fast-isel-abort
Mehdi Amini [Wed, 4 Mar 2015 01:48:39 +0000 (01:48 +0000)]
Use report_fatal_error instead of unreachable for -fast-isel-abort

Suggestion by Andrea Di Biagio

From: Mehdi Amini <mehdi.amini@apple.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231201 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agounique_ptrify ValID::ConstantStructElts
David Blaikie [Wed, 4 Mar 2015 01:41:01 +0000 (01:41 +0000)]
unique_ptrify ValID::ConstantStructElts

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231200 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoLLParser: Avoid copying ValIDs, the copy ctor is deprecated in C++11 due to the prese...
David Blaikie [Wed, 4 Mar 2015 01:40:07 +0000 (01:40 +0000)]
LLParser: Avoid copying ValIDs, the copy ctor is deprecated in C++11 due to the presence of a user-declared dtor

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231199 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoUse the vanilla func_end symbol for .size.
Rafael Espindola [Wed, 4 Mar 2015 01:35:23 +0000 (01:35 +0000)]
Use the vanilla func_end symbol for .size.

No need to create yet another temp symbol.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231198 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove MCStreamer include which isn't used here. NFC
Pete Cooper [Wed, 4 Mar 2015 01:24:26 +0000 (01:24 +0000)]
Remove MCStreamer include which isn't used here.  NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231195 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoThis file should always have included MCAssembler and not MCStreamer. NFC
Pete Cooper [Wed, 4 Mar 2015 01:24:24 +0000 (01:24 +0000)]
This file should always have included MCAssembler and not MCStreamer.  NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231194 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove MCStreamer.h include from MCContext.h and explictly include it where necessary...
Pete Cooper [Wed, 4 Mar 2015 01:24:11 +0000 (01:24 +0000)]
Remove MCStreamer.h include from MCContext.h and explictly include it where necessary.  NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231193 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRecommit r231168: unique_ptrify LiveRange::segmentSet
David Blaikie [Wed, 4 Mar 2015 01:20:33 +0000 (01:20 +0000)]
Recommit r231168: unique_ptrify LiveRange::segmentSet

GCC 4.7's libstdc++ doesn't have std::map::emplace, but it does have
std::unordered_map::emplace, and the use case here doesn't appear to
need ordering. The container has been changed in a separate/precursor
patch, and now this patch should hopefully build cleanly even with
GCC 4.7.

& then I realized the order of the container did matter, so extra
handling of ordering was added in r231189.

Original commit message:
This makes LiveRange non-copyable, and LiveInterval is already
non-movable (due to the explicit dtor), so now it's non-copyable and
non-movable.

Fix the one case where we were relying on the (deprecated in C++11)
implicit copy ctor of LiveInterval (which happened to work because the
ctor created an object with a null segmentSet, so double-deleting the
null pointer was fine).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231192 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoWeaken the check for a specific movl on the twoaddr-coalesce-3
Eric Christopher [Wed, 4 Mar 2015 01:19:17 +0000 (01:19 +0000)]
Weaken the check for a specific movl on the twoaddr-coalesce-3
test - we only care that there are two moves in the loop and not
which part is relative to which register anyhow.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231191 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoReverse the order libc++ and libc++abi are added in CMake.
Eric Fiselier [Wed, 4 Mar 2015 01:16:43 +0000 (01:16 +0000)]
Reverse the order libc++ and libc++abi are added in CMake.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231190 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRecommit r231175: Change LiveStackAnalysis::SS2IntervalMap from std::map to std:...
David Blaikie [Wed, 4 Mar 2015 01:15:53 +0000 (01:15 +0000)]
Recommit r231175: Change LiveStackAnalysis::SS2IntervalMap from std::map to std::unordered_map

The order of this container was needed at one point - so, at that point
create a temporary array of pointers, sort those, then iterate them.
This keeps lookup efficient (& the lesser issue, of allowing the use of
emplace... ), object identity preserved, and ordered iteration in the
one place that requires it.

While this has no functional change, I realize it does mean allocating
an extra data structure and performing a sort - so if this looks suspect
to anyone regarding perf characteristics, I'm all ears.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231189 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix the x86-upgrade-avx2-vbroadcast.ll test by commenting the CHECK lines
Filipe Cabecinhas [Wed, 4 Mar 2015 00:49:12 +0000 (00:49 +0000)]
Fix the x86-upgrade-avx2-vbroadcast.ll test by commenting the CHECK lines

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231187 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRegisterCoalescer: Gracefully continue if subrange merging fails.
Matthias Braun [Wed, 4 Mar 2015 00:43:50 +0000 (00:43 +0000)]
RegisterCoalescer: Gracefully continue if subrange merging fails.

There is a known bug where the register coalescer fails to merge
subranges when multiple ranges end up in the "overflow" bit 32 of the
lanemasks. A proper fix for this is complicated so for now this is a
workaround which lets the register coalescer drop the subregister
liveness information (we just loose some precision by that) and
continue.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231186 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDrop the "eh_" from eh_func_begin and eh_func_end.
Rafael Espindola [Wed, 4 Mar 2015 00:27:43 +0000 (00:27 +0000)]
Drop the "eh_" from eh_func_begin and eh_func_end.

They will be used for more than eh tables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231185 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "unique_ptrify LiveRange::segmentSet"
David Blaikie [Wed, 4 Mar 2015 00:15:02 +0000 (00:15 +0000)]
Revert "unique_ptrify LiveRange::segmentSet"

Apparently something does care about ordering of LiveIntervals... so
revert all that stuff (r231175, r231176, r231177) & take some time to
re-evaluate.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231184 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[RewriteStatepointsForGC] Fix a relocation bug w.r.t values defined by invoke instruc...
Philip Reames [Wed, 4 Mar 2015 00:13:52 +0000 (00:13 +0000)]
[RewriteStatepointsForGC] Fix a relocation bug w.r.t values defined by invoke instructions

RewriteStatepointsForGC pass emits an alloca for each GC pointer which will be relocated. It then inserts stores after def and all relocations, and inserts loads before each use as well. In the end, mem2reg is used to update IR with relocations in SSA form.

However, there is a problem with inserting stores for values defined by invoke instructions. The code didn't expect a def was a terminator instruction, and inserting instructions after these terminators resulted in malformed IR.

This patch fixes this problem by handling invoke instructions as a special case. If the def is an invoke instruction, the store will be inserted at the beginning of the normal destination block. Since return value from invoke instruction does not dominate the unwind destination block, no action is needed there.

Patch by: Chen Li
Differential Revision: http://reviews.llvm.org/D7923

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231183 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove 'llvm.x86.avx2.vbroadcasti128' intrinsic.
Juergen Ributzka [Wed, 4 Mar 2015 00:13:25 +0000 (00:13 +0000)]
Remove 'llvm.x86.avx2.vbroadcasti128' intrinsic.

The intrinsic is no longer generated by the front-end. Remove the intrinsic and
auto-upgrade it to a vector shuffle.

Reviewed by Nadav

This is related to rdar://problem/18742778.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231182 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDocument the LLVM "thunk" attribute added back in r226708
Reid Kleckner [Wed, 4 Mar 2015 00:08:56 +0000 (00:08 +0000)]
Document the LLVM "thunk" attribute added back in r226708

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231181 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoUpdate twoaddr-coalesce-3.ll to run on darwin and linux machines:
Eric Christopher [Tue, 3 Mar 2015 23:56:20 +0000 (23:56 +0000)]
Update twoaddr-coalesce-3.ll to run on darwin and linux machines:

a) Default relocation model differences,
b) Different numbers of # in comments

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231178 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd missing header include
David Blaikie [Tue, 3 Mar 2015 23:54:35 +0000 (23:54 +0000)]
Add missing header include

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231177 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRecommit r231168: unique_ptrify LiveRange::segmentSet
David Blaikie [Tue, 3 Mar 2015 23:53:03 +0000 (23:53 +0000)]
Recommit r231168: unique_ptrify LiveRange::segmentSet

GCC 4.7's libstdc++ doesn't have std::map::emplace, but it does have
std::unordered_map::emplace, and the use case here doesn't appear to
need ordering. The container has been changed in a separate/precursor
patch, and now this patch should hopefully build cleanly even with
GCC 4.7.

Original commit message:
This makes LiveRange non-copyable, and LiveInterval is already
non-movable (due to the explicit dtor), so now it's non-copyable and
non-movable.

Fix the one case where we were relying on the (deprecated in C++11)
implicit copy ctor of LiveInterval (which happened to work because the
ctor created an object with a null segmentSet, so double-deleting the
null pointer was fine).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231176 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoChange LiveStackAnalysis::SS2IntervalMap from std::map to std::unordered_map
David Blaikie [Tue, 3 Mar 2015 23:53:00 +0000 (23:53 +0000)]
Change LiveStackAnalysis::SS2IntervalMap from std::map to std::unordered_map

This use case doesn't appear to benefit from ordering, and
std::unordered_map has the advantage that it supports emplace (the
LiveInterval values really shouldn't be copyable or movable & they won't
be in a near-future patch).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231175 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "unique_ptrify LiveRange::segmentSet"
David Blaikie [Tue, 3 Mar 2015 23:44:07 +0000 (23:44 +0000)]
Revert "unique_ptrify LiveRange::segmentSet"

GCC 4.7 *shakes fist* (doesn't have std::map::emplace... )

This reverts commit r231168.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231173 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMove TargetLibraryInfo data from two files into one common .def file.
Jan Wen Voung [Tue, 3 Mar 2015 23:41:58 +0000 (23:41 +0000)]
Move TargetLibraryInfo data from two files into one common .def file.

Summary:
This makes it more obvious that the enum definition and the
"StandardName" array is in sync. Mechanically refactored w/ a
python script.

Test Plan: still compiles

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D7845

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231172 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agounique_ptrify LiveRange::segmentSet
David Blaikie [Tue, 3 Mar 2015 23:30:40 +0000 (23:30 +0000)]
unique_ptrify LiveRange::segmentSet

This makes LiveRange non-copyable, and LiveInterval is already
non-movable (due to the explicit dtor), so now it's non-copyable and
non-movable.

Fix the one case where we were relying on the (deprecated in C++11)
implicit copy ctor of LiveInterval (which happened to work because the
ctor created an object with a null segmentSet, so double-deleting the
null pointer was fine).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231168 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[sanitizer/coverage] Add AFL-style coverage counters (search heuristic for fuzzing).
Kostya Serebryany [Tue, 3 Mar 2015 23:27:02 +0000 (23:27 +0000)]
[sanitizer/coverage] Add AFL-style coverage counters (search heuristic for fuzzing).

Introduce -mllvm -sanitizer-coverage-8bit-counters=1
which adds imprecise thread-unfriendly 8-bit coverage counters.

The run-time library maps these 8-bit counters to 8-bit bitsets in the same way
AFL (http://lcamtuf.coredump.cx/afl/technical_details.txt) does:
counter values are divided into 8 ranges and based on the counter
value one of the bits in the bitset is set.
The AFL ranges are used here: 1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+.

These counters provide a search heuristic for single-threaded
coverage-guided fuzzers, we do not expect them to be useful for other purposes.

Depending on the value of -fsanitize-coverage=[123] flag,
these counters will be added to the function entry blocks (=1),
every basic block (=2), or every edge (=3).

Use these counters as an optional search heuristic in the Fuzzer library.
Add a test where this heuristic is critical.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231166 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove subtarget dependence in pass pipeline setup for AArch64.
Eric Christopher [Tue, 3 Mar 2015 23:22:40 +0000 (23:22 +0000)]
Remove subtarget dependence in pass pipeline setup for AArch64.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231165 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoWinEH: Remove vestigial EH object
Reid Kleckner [Tue, 3 Mar 2015 23:20:30 +0000 (23:20 +0000)]
WinEH: Remove vestigial EH object

Ultimately, we'll need to leave something behind to indicate which
alloca will hold the exception, but we can figure that out when it comes
time to emit the __CxxFrameHandler3 catch handler table.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231164 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoLangRef: Clarify select's semantics with vector arguments
David Majnemer [Tue, 3 Mar 2015 22:45:47 +0000 (22:45 +0000)]
LangRef: Clarify select's semantics with vector arguments

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231158 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoInstCombine: Ensure select condition types are identical before merging
David Majnemer [Tue, 3 Mar 2015 22:40:36 +0000 (22:40 +0000)]
InstCombine: Ensure select condition types are identical before merging

Selection conditions may be vectors or scalars.  Make sure InstCombine
doesn't indiscriminately assume that a select which is value dependent
on another select have identical select condition types.

This fixes PR22773.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231156 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMoving WinEH outlining tests to an architecture neutral location
Andrew Kaylor [Tue, 3 Mar 2015 22:33:39 +0000 (22:33 +0000)]
Moving WinEH outlining tests to an architecture neutral location

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231155 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAvoid copying LiveInterval, this could lead to a double-delete
David Blaikie [Tue, 3 Mar 2015 22:25:48 +0000 (22:25 +0000)]
Avoid copying LiveInterval, this could lead to a double-delete

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231154 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix a problem where the TwoAddressInstructionPass which generate redundant register...
Eric Christopher [Tue, 3 Mar 2015 22:03:03 +0000 (22:03 +0000)]
Fix a problem where the TwoAddressInstructionPass which generate redundant register moves in a loop.

From:
int M, total;
void foo() {
int i;
for (i = 0; i < M; i++) {
  total = total + i / 2;
}
}

This is the kernel loop:

.LBB0_2: # %for.body

=>This Inner Loop Header: Depth=1
movl %edx, %esi
movl %ecx, %edx
shrl $31, %edx
addl %ecx, %edx
sarl %edx
addl %esi, %edx
incl %ecx
cmpl %eax, %ecx
jl .LBB0_2
--------------------------
The first mov insn "movl %edx, %esi" could be removed if we change "addl %esi, %edx" to "addl %edx, %esi".

The IR before TwoAddressInstructionPass is:
BB#2: derived from LLVM BB %for.body

Predecessors according to CFG: BB#1 BB#2
    %vreg3<def> = COPY %vreg12<kill>; GR32:%vreg3,%vreg12
    %vreg2<def> = COPY %vreg11<kill>; GR32:%vreg2,%vreg11
    %vreg7<def,tied1> = SHR32ri %vreg3<tied0>, 31, %EFLAGS<imp-def,dead>; GR32:%vreg7,%vreg3
    %vreg8<def,tied1> = ADD32rr %vreg3<tied0>, %vreg7<kill>, %EFLAGS<imp-def,dead>; GR32:%vreg8,%vreg3,%vreg7
    %vreg9<def,tied1> = SAR32r1 %vreg8<kill,tied0>, %EFLAGS<imp-def,dead>; GR32:%vreg9,%vreg8
    %vreg4<def,tied1> = ADD32rr %vreg9<kill,tied0>, %vreg2<kill>, %EFLAGS<imp-def,dead>; GR32:%vreg4,%vreg9,%vreg2
    %vreg5<def,tied1> = INC64_32r %vreg3<kill,tied0>, %EFLAGS<imp-def,dead>; GR32:%vreg5,%vreg3
    CMP32rr %vreg5, %vreg0, %EFLAGS<imp-def>; GR32:%vreg5,%vreg0
    %vreg11<def> = COPY %vreg4; GR32:%vreg11,%vreg4
    %vreg12<def> = COPY %vreg5<kill>; GR32:%vreg12,%vreg5
    JL_4 <BB#2>, %EFLAGS<imp-use,kill>
Now TwoAddressInstructionPass will choose vreg9 to be tied with vreg4. However, it doesn't see that there is copy from vreg4 to vreg11 and another copy from vreg11 to vreg2 inside the loop body. To remove those copies, it is necessary to choose vreg2 to be tied with vreg4 instead of vreg9. This code pattern commonly appears when there is reduction operation in a loop.

So check for a reversed copy chain and if we encounter one then we can commute the add instruction so we can avoid a copy.

Patch by Wei Mi.
http://reviews.llvm.org/D7806

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231148 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove getDataLayout() from Instruction/GlobalValue/BasicBlock/Function
Mehdi Amini [Tue, 3 Mar 2015 22:01:13 +0000 (22:01 +0000)]
Remove getDataLayout() from Instruction/GlobalValue/BasicBlock/Function

Summary:
This does not conceptually belongs here. Instead provide a shortcut
getModule() that provides access to the DataLayout.

Reviewers: chandlerc, echristo

Reviewed By: echristo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D8027

From: Mehdi Amini <mehdi.amini@apple.com>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231147 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix the build broken in r231142
David Blaikie [Tue, 3 Mar 2015 21:56:11 +0000 (21:56 +0000)]
Fix the build broken in r231142

I removed the copy ctor, thinking that'd be the end of it - these
iterators should be perfectly assignable even from disjoint ranges (as
any iterator would be) - exkcept that the member was const.

Unconstify it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231146 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDAGCombiner::LoadedSlice: Remove explicit copy ctor in favor of the Rule of Zero
David Blaikie [Tue, 3 Mar 2015 21:50:47 +0000 (21:50 +0000)]
DAGCombiner::LoadedSlice: Remove explicit copy ctor in favor of the Rule of Zero

This way, the copy assignment operator can be used without hitting the
deprecated case in C++11.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231144 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRewriteStatepointsForGC::PhiState: Remove explicit copy ctor in favor of the Rule...
David Blaikie [Tue, 3 Mar 2015 21:49:07 +0000 (21:49 +0000)]
RewriteStatepointsForGC::PhiState: Remove explicit copy ctor in favor of the Rule of Zero

The assertion was just checking a class invariant that's pretty easy to
verify by inspection (no mutating operations, and the two non-copy ctors
already ensure the state is maintained) so remove the explicit copy ctor
in favor of the default, thus allowing the use of the default copy
assignment operator without hitting the C++11 deprecation here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231143 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoCFG::SuccessorIterator: Remove explicit copy assignment, as the default is fine
David Blaikie [Tue, 3 Mar 2015 21:45:54 +0000 (21:45 +0000)]
CFG::SuccessorIterator: Remove explicit copy assignment, as the default is fine

There's no reason to disallow assigning an iterator from one range to an
iterator that previously iterated over a disjoint range. This then
follows the Rule of Zero, allowing implicit copy construction to be used
without hitting the case that's deprecated in C++11.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231142 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoCFG::SuccessorIterator::SuccessorProxy:: Expliictly default copy construction as...
David Blaikie [Tue, 3 Mar 2015 21:44:06 +0000 (21:44 +0000)]
CFG::SuccessorIterator::SuccessorProxy:: Expliictly default copy construction as it is deprecated in C++11 in the presence of explicit copy assignment.

See r231099 for similar issues & details in [Small]BitVector.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231141 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoTeach ComputeNumSignBits about signed divisions.
Nadav Rotem [Tue, 3 Mar 2015 21:39:02 +0000 (21:39 +0000)]
Teach ComputeNumSignBits about signed divisions.

http://reviews.llvm.org/D8028
rdar://20023136

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231140 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the explicit SDNodeIterator::operator= in favor of the implicit default
David Blaikie [Tue, 3 Mar 2015 21:26:17 +0000 (21:26 +0000)]
Remove the explicit SDNodeIterator::operator= in favor of the implicit default

There doesn't seem to be any need to assert that iterator assignment is
between iterators over the same node - if you want to reuse an iterator
variable to iterate another node, that's perfectly acceptable. Just
don't mix comparisons between iterators into disjoint sequences, as
usual.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231138 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRevert "Remove the explicit SDNodeIterator::operator= in favor of the implicit default"
David Blaikie [Tue, 3 Mar 2015 21:18:16 +0000 (21:18 +0000)]
Revert "Remove the explicit SDNodeIterator::operator= in favor of the implicit default"

Accidentally committed a few more of these cleanup changes than
intended. Still breaking these out & tidying them up.

This reverts commit r231135.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231136 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the explicit SDNodeIterator::operator= in favor of the implicit default
David Blaikie [Tue, 3 Mar 2015 21:17:08 +0000 (21:17 +0000)]
Remove the explicit SDNodeIterator::operator= in favor of the implicit default

There doesn't seem to be any need to assert that iterator assignment is
between iterators over the same node - if you want to reuse an iterator
variable to iterate another node, that's perfectly acceptable. Just
don't mix comparisons between iterators into disjoint sequences, as
usual.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231135 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove the explicit SUnitIterator::operator= as the default is just fine
David Blaikie [Tue, 3 Mar 2015 21:17:00 +0000 (21:17 +0000)]
Remove the explicit SUnitIterator::operator= as the default is just fine

There doesn't seem to be any need to assert that iterator assignment is
between iterators over the same node - if you want to reuse an iterator
variable to iterate another node, that's perfectly acceptable. Just
don't mix comparisons between iterators into disjoint sequences, as
usual.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231134 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove LatencyPriorityQueue::dump because it relies on an implicit copy ctor which...
David Blaikie [Tue, 3 Mar 2015 21:16:56 +0000 (21:16 +0000)]
Remove LatencyPriorityQueue::dump because it relies on an implicit copy ctor which is deprecated in C++11 (due to the presence of a user-declare dtor in the base class)

This type could be made copyable (= default a protected copy ctor in the
base class, and preferably make the derived class final to avoid risks
of providing a slicing copy operation to further derived classes) but it
seemed easier to avoid that complexity for a dump function that I assume
(by symmetry with ResourcePriorityQueue's dump, which was actively
buggy) not often used.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231133 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoCorrectly handle -pass-remarks in the gold plugin.
Rafael Espindola [Tue, 3 Mar 2015 21:11:13 +0000 (21:11 +0000)]
Correctly handle -pass-remarks in the gold plugin.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231132 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[X86][ELF] Correct relocation for DWARF TLS references
Paul Robinson [Tue, 3 Mar 2015 21:01:27 +0000 (21:01 +0000)]
[X86][ELF] Correct relocation for DWARF TLS references
Previously we had only Linux using DTPOFF for these; all X86 ELF
targets should. Fixes a side issue mentioned in PR21077.

Differential Revision: http://reviews.llvm.org/D8011

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231130 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoremove enum value names from comments; NFC
Sanjay Patel [Tue, 3 Mar 2015 20:58:35 +0000 (20:58 +0000)]
remove enum value names from comments; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231129 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd support for SunOS function/data sections and associated
Eric Christopher [Tue, 3 Mar 2015 20:54:29 +0000 (20:54 +0000)]
Add support for SunOS function/data sections and associated
section gc.

Patch by Bill Rushmore.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231128 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agounique_ptrify ResourcePriorityQueue::ResourceModel
David Blaikie [Tue, 3 Mar 2015 20:49:08 +0000 (20:49 +0000)]
unique_ptrify ResourcePriorityQueue::ResourceModel

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231127 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove ResourcePriorityQueue::dump as it relies on copying a non-copyable type which...
David Blaikie [Tue, 3 Mar 2015 20:49:05 +0000 (20:49 +0000)]
Remove ResourcePriorityQueue::dump as it relies on copying a non-copyable type which would result in a double-delete

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231126 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[ADT] fail-fast iterators for DenseMap
Sanjoy Das [Tue, 3 Mar 2015 20:46:45 +0000 (20:46 +0000)]
[ADT] fail-fast iterators for DenseMap

This patch was landed in r231035 and reverted because it was buggy.
This is fixed version of the same change.

Summary:
This patch is an attempt at making `DenseMapIterator`s "fail-fast".
Fail-fast iterators that have been invalidated due to insertion into
the host `DenseMap` deterministically trip an assert (in debug mode)
on access, instead of non-deterministically hitting memory corruption
issues.

Reviewers: dexonsmith, dberlin, ruiu, chandlerc

Reviewed By: chandlerc

Subscribers: yaron.keren, chandlerc, llvm-commits

Differential Revision: http://reviews.llvm.org/D7931

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231125 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agouse bool operator shortcut; NFC
Sanjay Patel [Tue, 3 Mar 2015 20:41:27 +0000 (20:41 +0000)]
use bool operator shortcut; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231123 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFixing problem with field initialization order
Andrew Kaylor [Tue, 3 Mar 2015 20:22:09 +0000 (20:22 +0000)]
Fixing problem with field initialization order

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231122 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix PR22762. When emitting a DWARF expression check whether this is the
Adrian Prantl [Tue, 3 Mar 2015 20:12:52 +0000 (20:12 +0000)]
Fix PR22762. When emitting a DWARF expression check whether this is the
frame register before checking if there is a DWARF register number for it.

Thanks to H.J. Lu for diagnosing this and providing the testcase!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231121 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoOutline cleanup handlers for native Windows C++ exception handling
Andrew Kaylor [Tue, 3 Mar 2015 20:00:16 +0000 (20:00 +0000)]
Outline cleanup handlers for native Windows C++ exception handling

Differential Revision: http://reviews.llvm.org/D7865

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231117 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd the following 64-bit vector integer arithmetic instructions added in POWER8:
Kit Barton [Tue, 3 Mar 2015 19:55:45 +0000 (19:55 +0000)]
Add the following 64-bit vector integer arithmetic instructions added in POWER8:

vaddudm
vsubudm
vmulesw
vmulosw
vmuleuw
vmulouw
vmuluwm
vmaxsd
vmaxud
vminsd
vminud
vcmpequd
vcmpequd.
vcmpgtsd
vcmpgtsd.
vcmpgtud
vcmpgtud.
vrld
vsld
vsrd
vsrad

Phabricator review: http://reviews.llvm.org/D7959

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231115 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDeltaAlgorithm: Provide protected default copy ctor for use by test derived class.
David Blaikie [Tue, 3 Mar 2015 19:53:04 +0000 (19:53 +0000)]
DeltaAlgorithm: Provide protected default copy ctor for use by test derived class.

Without this, use of this copy ctor is deprecated in C++11 due to the
presence of a user-declared dtor.

Marking the class final is just a little extra security that there are
no further derived classes that may then end up using the intermediate
base class's copy assignment operator and cause slicing to occur.

I didn't bother marking the other (non-test) base class final, since it
has reference members so it won't have any implicit assignment operators
anyway. Open to ideas on that, though.

We probably want a warning about use of a slicing assignment operator,
then I wouldn't worry so much about marking the class as final.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231114 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove explicit no-op dtor in favor of the implicit dtor so as not to disable/depreca...
David Blaikie [Tue, 3 Mar 2015 19:53:02 +0000 (19:53 +0000)]
Remove explicit no-op dtor in favor of the implicit dtor so as not to disable/deprecate the copy operations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231113 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove no-op dtor so that use of the implicit copy ctor/assignment operator are not...
David Blaikie [Tue, 3 Mar 2015 19:52:59 +0000 (19:52 +0000)]
Remove no-op dtor so that use of the implicit copy ctor/assignment operator are not deprecated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231112 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAdd a comment above findRepresentativeClass explaining why it's
Eric Christopher [Tue, 3 Mar 2015 19:47:14 +0000 (19:47 +0000)]
Add a comment above findRepresentativeClass explaining why it's
where it is so that future generations can understand.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231111 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove explicit copy ctor in favor of the implicit one so that the use of the copy...
David Blaikie [Tue, 3 Mar 2015 19:29:14 +0000 (19:29 +0000)]
Remove explicit copy ctor in favor of the implicit one so that the use of the copy assignment operator is not deprecated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231110 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove explicit copy assignment operator in favor of the implicit/default to avoid...
David Blaikie [Tue, 3 Mar 2015 19:29:13 +0000 (19:29 +0000)]
Remove explicit copy assignment operator in favor of the implicit/default to avoid disabling/deprecating the implicit copy ctor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231109 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove explicit copy ctor in favor of the default so as not to disable/deprecate...
David Blaikie [Tue, 3 Mar 2015 19:29:11 +0000 (19:29 +0000)]
Remove explicit copy ctor in favor of the default so as not to disable/deprecate the implicit copy assignment operator

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231108 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agounique_ptrify FullDependenceAnalysis::DV
David Blaikie [Tue, 3 Mar 2015 19:20:18 +0000 (19:20 +0000)]
unique_ptrify FullDependenceAnalysis::DV

Making this type a little harder to abuse (see workaround relating to
use of the implicit copy ctor in the prior commit)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231104 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFullDependenceAnalysis: Avoid using the (deprecated in C++11) copy ctor
David Blaikie [Tue, 3 Mar 2015 19:20:16 +0000 (19:20 +0000)]
FullDependenceAnalysis: Avoid using the (deprecated in C++11) copy ctor

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231103 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoRemove some explicit copy assignment operators is favor of implicit ones, as their...
David Blaikie [Tue, 3 Mar 2015 19:20:13 +0000 (19:20 +0000)]
Remove some explicit copy assignment operators is favor of implicit ones, as their presence makes the use of the implicit copy ctor deprecated in C++11

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231102 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoFix PR22750: non-determinism causes assertion failure in DWARF generation
Dario Domizioli [Tue, 3 Mar 2015 18:40:53 +0000 (18:40 +0000)]
Fix PR22750: non-determinism causes assertion failure in DWARF generation

The cause of the issue is the interaction of two factors:
1) When generating a DW_TAG_imported_declaration DIE which imports another
   imported declaration, the code in AsmPrinter/DwarfCompileUnit.cpp
   asserts that the second imported declaration must already have a DIE.
2) There is a non-determinism in the order in which imported declarations
   within the same scope are processed.
Because of the non-determinism (2), it is possible that an imported
declaration is processed before another one it depends on, breaking the
assumption in (1).

The source of the non-determinism is that the imported declaration
DIDescriptors are sorted by scope in DwarfDebug::beginModule(); however that
sort is not a stable_sort, therefore the order of the declarations within
the same scope is not preserved. The attached patch changes the std::sort to
a std::stable_sort and it fixes the problem.

Test omitted due to it being non-deterministic and depending on the
implementation of std::sort.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231100 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[Small]BitVector::reference: Explicitly default copy construction as it is deprecated...
David Blaikie [Tue, 3 Mar 2015 18:39:00 +0000 (18:39 +0000)]
[Small]BitVector::reference: Explicitly default copy construction as it is deprecated in C++11 in the presence of explicit copy assignment.

I tried making these private & friended to the BitVector, but that
didn't work - there's one use of BitVector::reference in Clang that
actually copies it into a local variable & uses it from there, rather
than just using the result of op[] in a temporary expression.

Whether or not this is desired is debatable (we could just fix that one
use in Clang) & it's not clear which way the C++ standard falls on this
for std::bitset's reference type (it has the same bug at least in
libstdc++, but Clang's -Wdeprecated doesn't flag it, because it's in a
standard header)

While it was only BitVector::reference's copy ctor that was referenced
by user code, I made SmallBitVector::reference's copy ctor public too,
for consistency.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231099 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAvoid explicitly declaring the copy assignment operator, as this unnecessarily makes...
David Blaikie [Tue, 3 Mar 2015 18:29:27 +0000 (18:29 +0000)]
Avoid explicitly declaring the copy assignment operator, as this unnecessarily makes the copy ctor deprecated in C++11

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231095 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoTwine: Explicitly default the copy ctor as it's otherwise deprecated in C++11 by...
David Blaikie [Tue, 3 Mar 2015 18:29:25 +0000 (18:29 +0000)]
Twine: Explicitly default the copy ctor as it's otherwise deprecated in C++11 by the presence of a user-declared copy assignment operator.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231094 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDenseMapIterator: Avoid explicitly declaring the copy ctor as this makes the copy...
David Blaikie [Tue, 3 Mar 2015 18:29:23 +0000 (18:29 +0000)]
DenseMapIterator: Avoid explicitly declaring the copy ctor as this makes the copy assignment operator deprecated in C++11

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231093 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake Triple::getOSVersion make sense for Android.
Dan Albert [Tue, 3 Mar 2015 18:23:51 +0000 (18:23 +0000)]
Make Triple::getOSVersion make sense for Android.

Reviewers: srhines

Reviewed By: srhines

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D7928

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231090 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago80-column fixup.
Eric Christopher [Tue, 3 Mar 2015 17:54:39 +0000 (17:54 +0000)]
80-column fixup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231088 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake llvm.eh.begincatch use an outparam
Reid Kleckner [Tue, 3 Mar 2015 17:41:09 +0000 (17:41 +0000)]
Make llvm.eh.begincatch use an outparam

Ultimately, __CxxFrameHandler3 needs us to put a stack offset in a
table, and it will take responsibility for copying the exception object
into that slot. Modelling the exception object as an SSA value returned
by begincatch isn't going to work in general, so make it use an output
parameter.

Reviewers: andrew.w.kaylor

Differential Revision: http://reviews.llvm.org/D7920

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231086 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[AArch64] When combining constant mul of -3, prefer (sub x, (shl x, N)).
Chad Rosier [Tue, 3 Mar 2015 17:31:01 +0000 (17:31 +0000)]
[AArch64] When combining constant mul of -3, prefer (sub x, (shl x, N)).

This change only effects codegen when the constant is -3.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231085 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoDebugInfo: Move new hierarchy into place
Duncan P. N. Exon Smith [Tue, 3 Mar 2015 17:24:31 +0000 (17:24 +0000)]
DebugInfo: Move new hierarchy into place

Move the specialized metadata nodes for the new debug info hierarchy
into place, finishing off PR22464.  I've done bootstraps (and all that)
and I'm confident this commit is NFC as far as DWARF output is
concerned.  Let me know if I'm wrong :).

The code changes are fairly mechanical:

  - Bumped the "Debug Info Version".
  - `DIBuilder` now creates the appropriate subclass of `MDNode`.
  - Subclasses of DIDescriptor now expect to hold their "MD"
    counterparts (e.g., `DIBasicType` expects `MDBasicType`).
  - Deleted a ton of dead code in `AsmWriter.cpp` and `DebugInfo.cpp`
    for printing comments.
  - Big update to LangRef to describe the nodes in the new hierarchy.
    Feel free to make it better.

Testcase changes are enormous.  There's an accompanying clang commit on
its way.

If you have out-of-tree debug info testcases, I just broke your build.

  - `upgrade-specialized-nodes.sh` is attached to PR22564.  I used it to
    update all the IR testcases.
  - Unfortunately I failed to find way to script the updates to CHECK
    lines, so I updated all of these by hand.  This was fairly painful,
    since the old CHECKs are difficult to reason about.  That's one of
    the benefits of the new hierarchy.

This work isn't quite finished, BTW.  The `DIDescriptor` subclasses are
almost empty wrappers, but not quite: they still have loose casting
checks (see the `RETURN_FROM_RAW()` macro).  Once they're completely
gutted, I'll rename the "MD" classes to "DI" and kill the wrappers.  I
also expect to make a few schema changes now that it's easier to reason
about everything.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231082 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoIR: Add missing API to specialized metadata nodes
Duncan P. N. Exon Smith [Tue, 3 Mar 2015 16:45:34 +0000 (16:45 +0000)]
IR: Add missing API to specialized metadata nodes

Add the final bits of API that `DIBuilder` needs before the new nodes
can be moved into place.

  - Add `MDType::clone()` and `MDType::setFlags()` to support
    `DIBuilder::createTypeWithFlags()`.
  - Add `MDBasicType::get()` overload that just requires a tag and a
    name, as a convenience for `DIBuilder::createUnspecifiedType()`.
  - Add `MDLocalVariable::withInline()` and
    `MDLocalVariable::withoutInline()` to support
    `llvm::createInlinedVariable()` and
    `llvm::cleanseInlinedVariable()`.

(Somehow these got lost inside the "move into place" patch I'm about to
commit -- better to commit separately!)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231079 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoMake llvm/test/Object/archive-format.test CRLF-tolerant.
NAKAMURA Takumi [Tue, 3 Mar 2015 15:54:48 +0000 (15:54 +0000)]
Make llvm/test/Object/archive-format.test CRLF-tolerant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231074 91177308-0d34-0410-b5e6-96231b3b80d8

9 years ago[X86][Haswell][SchedModel] Fix patterns for scalar FMA3 variants.
Michael Kuperstein [Tue, 3 Mar 2015 15:47:02 +0000 (15:47 +0000)]
[X86][Haswell][SchedModel] Fix patterns for scalar FMA3 variants.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231073 91177308-0d34-0410-b5e6-96231b3b80d8

9 years agoAVX-512: Moved patterns for masked load/store under avx_store, avx_load classes.
Elena Demikhovsky [Tue, 3 Mar 2015 15:03:35 +0000 (15:03 +0000)]
AVX-512: Moved patterns for masked load/store under avx_store, avx_load classes.
No functional changes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231069 91177308-0d34-0410-b5e6-96231b3b80d8