David Blaikie [Wed, 4 Mar 2015 07:35:04 +0000 (07:35 +0000)]
use = default instead of {}
llvm-svn: 231223
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.
llvm-svn: 231222
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.
llvm-svn: 231221
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.
llvm-svn: 231220
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
llvm-svn: 231219
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.
llvm-svn: 231218
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.
llvm-svn: 231217
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
llvm-svn: 231216
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.
llvm-svn: 231215
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
llvm-svn: 231214
Seth Cantrell [Wed, 4 Mar 2015 05:58:08 +0000 (05:58 +0000)]
AT.isValid() should come before AT.matchesType()
llvm-svn: 231213
Rui Ueyama [Wed, 4 Mar 2015 04:36:46 +0000 (04:36 +0000)]
Make File non-const in the resolver.
File objects are not really const in the resolver. We set ordinals to
them and call beforeLink hooks. Also, File's member functions marked
as const are not really const. ArchiveFile never returns the same
member file twice, so it remembers files returned before. find() has
side effects.
In order to deal with the inconsistencies, we sprinkled const_casts
and marked member varaibles as mutable.
This patch removes const from there to reflect the reality.
llvm-svn: 231212
Seth Cantrell [Wed, 4 Mar 2015 03:12:10 +0000 (03:12 +0000)]
Add a format warning for "%p" with non-void* args
GCC -pedantic produces a format warning when the "%p" specifier is used with
arguments that are not void*. It's useful for portability to be able to
catch such warnings with clang as well. The warning is off by default in
both gcc and with this patch. This patch enables it either when extensions
are disabled with -pedantic, or with the specific flag -Wformat-pedantic.
The C99 and C11 specs do appear to require arguments corresponding to 'p'
specifiers to be void*: "If any argument is not the correct type for the
corresponding conversion specification, the behavior is undefined."
[7.19.6.1 p9], and of the 'p' format specifier "The argument shall be a
pointer to void." [7.19.6.1 p8]
Both printf and scanf format checking are covered.
llvm-svn: 231211
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
llvm-svn: 231210
Frederic Riss [Wed, 4 Mar 2015 02:30:08 +0000 (02:30 +0000)]
Constify AsmPrinter passed to DIE methods.
llvm-svn: 231209
Rui Ueyama [Wed, 4 Mar 2015 02:12:55 +0000 (02:12 +0000)]
Revert "temporary"
This reverts accidental commit r231205.
llvm-svn: 231208
Filipe Cabecinhas [Wed, 4 Mar 2015 02:09:40 +0000 (02:09 +0000)]
Fix the test for r231201. We don't crash anymore.
llvm-svn: 231207
Rui Ueyama [Wed, 4 Mar 2015 02:09:22 +0000 (02:09 +0000)]
Simplify FileArchive. NFC.
This patch moves local variable definitions so that their scope get narrower.
Also uses range-based loop. Both are for readability.
llvm-svn: 231206
Rui Ueyama [Wed, 4 Mar 2015 02:09:21 +0000 (02:09 +0000)]
temporary
llvm-svn: 231205
David Blaikie [Wed, 4 Mar 2015 02:07:51 +0000 (02:07 +0000)]
Workaround MSVC not providing implicit move members
llvm-svn: 231204
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.
llvm-svn: 231203
Zachary Turner [Wed, 4 Mar 2015 01:58:01 +0000 (01:58 +0000)]
Further reduce header footprint of Debugger.h.
llvm-svn: 231202
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>
llvm-svn: 231201
David Blaikie [Wed, 4 Mar 2015 01:41:01 +0000 (01:41 +0000)]
unique_ptrify ValID::ConstantStructElts
llvm-svn: 231200
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
llvm-svn: 231199
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.
llvm-svn: 231198
Ed Maste [Wed, 4 Mar 2015 01:29:18 +0000 (01:29 +0000)]
Restore accidental deletion of header comment character
llvm-svn: 231197
Rui Ueyama [Wed, 4 Mar 2015 01:26:32 +0000 (01:26 +0000)]
Make a private function private.
llvm-svn: 231196
Pete Cooper [Wed, 4 Mar 2015 01:24:26 +0000 (01:24 +0000)]
Remove MCStreamer include which isn't used here. NFC
llvm-svn: 231195
Pete Cooper [Wed, 4 Mar 2015 01:24:24 +0000 (01:24 +0000)]
This file should always have included MCAssembler and not MCStreamer. NFC
llvm-svn: 231194
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
llvm-svn: 231193
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).
llvm-svn: 231192
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.
llvm-svn: 231191
Eric Fiselier [Wed, 4 Mar 2015 01:16:43 +0000 (01:16 +0000)]
Reverse the order libc++ and libc++abi are added in CMake.
llvm-svn: 231190
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.
llvm-svn: 231189
Ed Maste [Wed, 4 Mar 2015 01:05:52 +0000 (01:05 +0000)]
Another configure+make fix for r230963
llvm-svn: 231188
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
llvm-svn: 231187
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.
llvm-svn: 231186
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.
llvm-svn: 231185
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.
llvm-svn: 231184
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
llvm-svn: 231183
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.
llvm-svn: 231182
Reid Kleckner [Wed, 4 Mar 2015 00:08:56 +0000 (00:08 +0000)]
Document the LLVM "thunk" attribute added back in r226708
llvm-svn: 231181
Ed Maste [Wed, 4 Mar 2015 00:06:26 +0000 (00:06 +0000)]
Try fixing configure+make build on FreeBSD after r230963
llvm-svn: 231180
Jacques Pienaar [Tue, 3 Mar 2015 23:58:09 +0000 (23:58 +0000)]
TypePrinter print __restrict if not in C99 mode
restrict is a keyword in C99 but not in C++ while clang accepts __restrict for C++ code. Modify the TypePrinter to print __restrict when not processing C99 code.
Printing restrict in C++ was problematic as printing the argument of
int f(int * __restrict a) { ... }
resulted in
int *restrict a
which is incorrect.
http://reviews.llvm.org/D8048
llvm-svn: 231179
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
llvm-svn: 231178
David Blaikie [Tue, 3 Mar 2015 23:54:35 +0000 (23:54 +0000)]
Add missing header include
llvm-svn: 231177
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).
llvm-svn: 231176
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).
llvm-svn: 231175
Kostya Serebryany [Tue, 3 Mar 2015 23:46:40 +0000 (23:46 +0000)]
[asan] more fixes for x32, patches by H.J. Lu
llvm-svn: 231174
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.
llvm-svn: 231173
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
llvm-svn: 231172
Kostya Serebryany [Tue, 3 Mar 2015 23:38:24 +0000 (23:38 +0000)]
[asan] attempting to fix the windows build
llvm-svn: 231171
Filipe Cabecinhas [Tue, 3 Mar 2015 23:36:57 +0000 (23:36 +0000)]
Try to unbreak the Windows buildbots.
llvm-svn: 231170
Zachary Turner [Tue, 3 Mar 2015 23:36:51 +0000 (23:36 +0000)]
Fix errors building on linux.
llvm-svn: 231169
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).
llvm-svn: 231168
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.
llvm-svn: 231166
Eric Christopher [Tue, 3 Mar 2015 23:22:40 +0000 (23:22 +0000)]
Remove subtarget dependence in pass pipeline setup for AArch64.
llvm-svn: 231165
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.
llvm-svn: 231164
Chaoren Lin [Tue, 3 Mar 2015 23:14:27 +0000 (23:14 +0000)]
Accidental semicolon in python.
llvm-svn: 231163
Kuba Brecka [Tue, 3 Mar 2015 23:13:02 +0000 (23:13 +0000)]
Symbolizer refactoring: Unify access to symbolizer tools from POSIXSymbolizer
Reviewed at http://reviews.llvm.org/D8029
llvm-svn: 231162
Zachary Turner [Tue, 3 Mar 2015 23:11:11 +0000 (23:11 +0000)]
Don't #include FormatManager.h from Debugger.h
Debugger.h is a huge file that gets included everywhere, and
FormatManager.h brings in a ton of unnecessary stuff and doesn't
even use anything from it in the header.
llvm-svn: 231161
Anton Yartsev [Tue, 3 Mar 2015 22:58:46 +0000 (22:58 +0000)]
[analyzer] unix.Malloc: preserve AllocaRegion bound to __builtin_alloca().
Binding __builtin_alloca() return value to the symbolic value kills previous binding to a AllocaRegion established by the core.BuiltinFunctions checker. Other checkers may rely upon this information. Rollback handling of __builtin_alloca() to the way prior to r229850.
llvm-svn: 231160
Chaoren Lin [Tue, 3 Mar 2015 22:46:20 +0000 (22:46 +0000)]
Remove unnecessary platform specific code from TestGlobalVariables.
llvm-svn: 231159
David Majnemer [Tue, 3 Mar 2015 22:45:47 +0000 (22:45 +0000)]
LangRef: Clarify select's semantics with vector arguments
llvm-svn: 231158
Ed Maste [Tue, 3 Mar 2015 22:44:18 +0000 (22:44 +0000)]
Fix FreeBSD build after r231145
llvm-svn: 231157
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.
llvm-svn: 231156
Andrew Kaylor [Tue, 3 Mar 2015 22:33:39 +0000 (22:33 +0000)]
Moving WinEH outlining tests to an architecture neutral location
llvm-svn: 231155
David Blaikie [Tue, 3 Mar 2015 22:25:48 +0000 (22:25 +0000)]
Avoid copying LiveInterval, this could lead to a double-delete
llvm-svn: 231154
Rui Ueyama [Tue, 3 Mar 2015 22:19:46 +0000 (22:19 +0000)]
Implement our own future and use that for FileArchive::preload().
std::promise and std::future in old version of libstdc++ are buggy.
I think that's the reason why LLD tests were flaky on Ubuntu 13
buildbots until we disabled file preloading.
In this patch, I implemented very simple future and used that in
FileArchive. Compared to std::promise and std::future, it lacks
many features, but should serve our purpose.
http://reviews.llvm.org/D8025
llvm-svn: 231153
Duncan P. N. Exon Smith [Tue, 3 Mar 2015 22:18:24 +0000 (22:18 +0000)]
DebugInfo: Remove useless test
This test doesn't provide any value (it just checks that the frontend
produces exactly one compile unit), and it certainly isn't doing what
the comment says. Noticed via IRC review of my update to it in r231083.
llvm-svn: 231152
Alexey Samsonov [Tue, 3 Mar 2015 22:15:44 +0000 (22:15 +0000)]
[UBSan] Add testcases for -fsanitize=shift-base and -fsanitize=shift-exponent.
llvm-svn: 231151
Alexey Samsonov [Tue, 3 Mar 2015 22:15:35 +0000 (22:15 +0000)]
[UBSan] Split -fsanitize=shift into -fsanitize=shift-base and -fsanitize=shift-exponent.
-fsanitize=shift is now a group that includes both these checks, so
exisiting users should not be affected.
This change introduces two new UBSan kinds that sanitize only left-hand
side and right-hand side of shift operation. In practice, invalid
exponent value (negative or too large) tends to cause more portability
problems, including inconsistencies between different compilers, crashes
and inadequeate results on non-x86 architectures etc. That is,
-fsanitize=shift-exponent failures should generally be addressed first.
As a bonus, this change simplifies CodeGen implementation for emitting left
shift (separate checks for base and exponent are now merged by the
existing generic logic in EmitCheck()), and LLVM IR for these checks
(the number of basic blocks is reduced).
llvm-svn: 231150
Alexey Samsonov [Tue, 3 Mar 2015 22:15:32 +0000 (22:15 +0000)]
[Sanitizers] Use uint64_t for bitmask of enabled sanitizers.
The total number of sanitizers and sanitizer groups will soon
reach 32.
llvm-svn: 231149
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
llvm-svn: 231148
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>
llvm-svn: 231147
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.
llvm-svn: 231146
Zachary Turner [Tue, 3 Mar 2015 21:51:25 +0000 (21:51 +0000)]
Further reduce the header footprint of Process.h
No functional change here, only deletes unnecessary headers
and moves one function's body from the .h file to the .cpp.
llvm-svn: 231145
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.
llvm-svn: 231144
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.
llvm-svn: 231143
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.
llvm-svn: 231142
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.
llvm-svn: 231141
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
llvm-svn: 231140
Rui Ueyama [Tue, 3 Mar 2015 21:38:38 +0000 (21:38 +0000)]
Fix -Wcast-qual warning.
llvm-svn: 231139
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.
llvm-svn: 231138
Aaron Watry [Tue, 3 Mar 2015 21:25:08 +0000 (21:25 +0000)]
Move mix from math to common
It has been part of the common functions since 1.0
Signed-off-by: Aaron Watry <awatry@gmail.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
llvm-svn: 231137
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.
llvm-svn: 231136
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.
llvm-svn: 231135
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.
llvm-svn: 231134
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.
llvm-svn: 231133
Rafael Espindola [Tue, 3 Mar 2015 21:11:13 +0000 (21:11 +0000)]
Correctly handle -pass-remarks in the gold plugin.
llvm-svn: 231132
Zachary Turner [Tue, 3 Mar 2015 21:05:17 +0000 (21:05 +0000)]
Don't #include ClangPersistentVariables.h from Process.h
Nothing from this header file was even being referenced in
Process.h anyway, so it was a completely unnecessary include.
llvm-svn: 231131
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
llvm-svn: 231130
Sanjay Patel [Tue, 3 Mar 2015 20:58:35 +0000 (20:58 +0000)]
remove enum value names from comments; NFC
llvm-svn: 231129
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.
llvm-svn: 231128
David Blaikie [Tue, 3 Mar 2015 20:49:08 +0000 (20:49 +0000)]
unique_ptrify ResourcePriorityQueue::ResourceModel
llvm-svn: 231127
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
llvm-svn: 231126
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
llvm-svn: 231125
Sumanth Gundapaneni [Tue, 3 Mar 2015 20:43:12 +0000 (20:43 +0000)]
Fix program name in "clang -help"
With out this patch,
"clang -help" prints "USAGE: clang-3 [options] <inputs>".
It should either print
USAGE: clang [options] <inputs>
or
USAGE: clang-3.7 [options] <inputs>
With this patch, on Linux, it prints
USAGE: clang-3.7 [options] <inputs>
On Windows, it prints
USAGE: clang.exe [options] <inputs>
llvm-svn: 231124
Sanjay Patel [Tue, 3 Mar 2015 20:41:27 +0000 (20:41 +0000)]
use bool operator shortcut; NFC
llvm-svn: 231123