Elena Demikhovsky [Tue, 16 Dec 2014 09:10:08 +0000 (09:10 +0000)]
X86: Added FeatureVectorUAMem for all AVX architectures.
According to AVX specification:
"Most arithmetic and data processing instructions encoded using the VEX prefix and
performing memory accesses have more flexible memory alignment requirements
than instructions that are encoded without the VEX prefix. Specifically,
With the exception of explicitly aligned 16 or 32 byte SIMD load/store instructions,
most VEX-encoded, arithmetic and data processing instructions operate in
a flexible environment regarding memory address alignment, i.e. VEX-encoded
instruction with 32-byte or 16-byte load semantics will support unaligned load
operation by default. Memory arguments for most instructions with VEX prefix
operate normally without causing #GP(0) on any byte-granularity alignment
(unlike Legacy SSE instructions)."
The same for AVX-512.
This change does not affect anything right now, because only the "memop pattern fragment"
depends on FeatureVectorUAMem and it is not used in AVX patterns.
All AVX patterns are based on the "unaligned load" anyway.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224330
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 16 Dec 2014 07:45:05 +0000 (07:45 +0000)]
Remove 'metadata' from comments
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224328
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 16 Dec 2014 07:40:31 +0000 (07:40 +0000)]
IR: Stop printing 'metadata' in Metadata::print()
Stop printing `metadata` in `Metadata::print()` and
`Metadata::printAsOperand()`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224327
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 16 Dec 2014 07:09:37 +0000 (07:09 +0000)]
IR: Make MDNode::dump() useful by adding addresses
It's horrible to inspect `MDNode`s in a debugger. All of their operands
that are `MDNode`s get dumped as `<badref>`, since we can't assign
metadata slots in the context of a `Metadata::dump()`. (Why not? Why
not assign numbers lazily? Because then each time you called `dump()`,
a given `MDNode` could have a different lazily assigned number.)
Fortunately, the C memory model gives us perfectly good identifiers for
`MDNode`. Add pointer addresses to the dumps, transforming this:
(lldb) e N->dump()
!{i32 662302, i32 26, <badref>, null}
(lldb) e ((MDNode*)N->getOperand(2))->dump()
!{i32 4, !"foo"}
into:
(lldb) e N->dump()
!{i32 662302, i32 26, <0x100706ee0>, null}
(lldb) e ((MDNode*)0x100706ee0)->dump()
!{i32 4, !"foo"}
and this:
(lldb) e N->dump()
0x101200248 = !{<badref>, <badref>, <badref>, <badref>, <badref>}
(lldb) e N->getOperand(0)
(const llvm::MDOperand) $0 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(1)
(const llvm::MDOperand) $1 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(2)
(const llvm::MDOperand) $2 = {
MD = 0x0000000101200058
}
(lldb) e N->getOperand(3)
(const llvm::MDOperand) $3 = {
MD = 0x00000001012004e0
}
(lldb) e N->getOperand(4)
(const llvm::MDOperand) $4 = {
MD = 0x0000000101200058
}
(lldb) e ((MDNode*)0x00000001012004e0)->dump()
!{}
(lldb) e ((MDNode*)0x0000000101200058)->dump()
!{null}
into:
(lldb) e N->dump()
!{<0x1012004e0>, <0x1012004e0>, <0x101200058>, <0x1012004e0>, <0x101200058>}
(lldb) e ((MDNode*)0x1012004e0)->dump()
!{}
(lldb) e ((MDNode*)0x101200058)->dump()
!{null}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224325
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 16 Dec 2014 07:08:19 +0000 (07:08 +0000)]
DebugInfo: Update testcase to actually check something
This test was missing a `Debug Info Version` so it's `not grep` was
passing vacuously. Update it to CHECK for something useful at the same
time so it doesn't bitrot quite so easily in the future.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224324
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Tue, 16 Dec 2014 05:53:25 +0000 (05:53 +0000)]
ARM: diagnose deprecated syntax
The use of SP and PC in the register list for stores is deprecated on ARM
(ARM ARM A.8.8.199):
ARM deprecates the use of ARM instructions that include the SP or the PC in
the list.
Provide a deprecation warning from the assembler in the case that the syntax is
ever seen.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224319
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Tue, 16 Dec 2014 05:51:41 +0000 (05:51 +0000)]
[PowerPC] Improve instruction selection bit-permuting operations (32-bit)
The PowerPC backend, somewhat embarrassingly, did not generate an
optimal-length sequence of instructions for a 32-bit bswap. While adding a
pattern for the bswap intrinsic to fix this would not have been terribly
difficult, doing so would not have addressed the real problem: we had been
generating poor code for many bit-permuting operations (by which I mean things
like byte-swap that permute the bits of one or more inputs around in various
ways). Here are some initial steps toward solving this deficiency.
Bit-permuting operations are represented, at the SDAG level, using ISD::ROTL,
SHL, SRL, AND and OR (mostly with constant second operands). Looking back
through these operations, we can build up a description of the bits in the
resulting value in terms of bits of one or more input values (and constant
zeros). For each bit, we compute the rotation amount from the original value,
and then group consecutive (value, rotation factor) bits into groups. Groups
sharing these attributes are then collected and sorted, and we can then
instruction select the entire permutation using a combination of masked
rotations (rlwinm), imm ands (andi/andis), and masked rotation inserts
(rlwimi).
The result is that instead of lowering an i32 bswap as:
rlwinm 5, 3, 24, 16, 23
rlwinm 4, 3, 24, 0, 7
rlwimi 4, 3, 8, 8, 15
rlwimi 5, 3, 8, 24, 31
rlwimi 4, 5, 0, 16, 31
we now produce:
rlwinm 4, 3, 8, 0, 31
rlwimi 4, 3, 24, 16, 23
rlwimi 4, 3, 24, 0, 7
and for the 'test6' example in the PowerPC/README.txt file:
unsigned test6(unsigned x) {
return ((x & 0x00FF0000) >> 16) | ((x & 0x000000FF) << 16);
}
we used to produce:
lis 4, 255
rlwinm 3, 3, 16, 0, 31
ori 4, 4, 255
and 3, 3, 4
and now we produce:
rlwinm 4, 3, 16, 24, 31
rlwimi 4, 3, 16, 8, 15
and, as a nice bonus, this fixes the FIXME in
test/CodeGen/PowerPC/rlwimi-and.ll.
This commit does not include instruction-selection for i64 operations, those
will come later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224318
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Tue, 16 Dec 2014 04:10:10 +0000 (04:10 +0000)]
ARM: 80-column
clang-format a function with an overly long string constant. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224314
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Tue, 16 Dec 2014 04:03:38 +0000 (04:03 +0000)]
LiveRangeCalc: Rewrite subrange calculation
This changes subrange calculation to calculate subranges sequentially
instead of in parallel. The code is easier to understand that way and
addresses the code review issues raised about LiveOutData being
hard to understand/needing more comments by removing them :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224313
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 16 Dec 2014 03:10:29 +0000 (03:10 +0000)]
Remove the last unnecessary member variable of mapped_file_region. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224312
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 16 Dec 2014 02:53:35 +0000 (02:53 +0000)]
Convert a member variable to a local variable. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224311
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 16 Dec 2014 02:19:26 +0000 (02:19 +0000)]
Remove unused member and simplify. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224309
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 16 Dec 2014 01:43:41 +0000 (01:43 +0000)]
Start adding thin archive support.
This is just sufficient for 'ar t' to work.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224307
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin Enderby [Tue, 16 Dec 2014 01:14:45 +0000 (01:14 +0000)]
Fix a bug in llvm-objdump’s -private-headers for 32-bit Mach-O files
printing the section header. And add some tests for this for 32-bit files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224302
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 16 Dec 2014 00:20:49 +0000 (00:20 +0000)]
ARM/AArch64: Attach the FrameSetup MIFlag to CFI instructions.
Debug info marks the first instruction without the FrameSetup flag
as being the end of the function prologue. Any CFI instructions in the
middle of the function prologue would cause debug info to end the prologue
too early and worse, attach the line number of the CFI instruction, which
incidentally is often 0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224294
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Tue, 16 Dec 2014 00:07:24 +0000 (00:07 +0000)]
[Hexagon] Adding doubleword multiplies with and without accumulation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224293
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Ilseman [Mon, 15 Dec 2014 23:41:21 +0000 (23:41 +0000)]
Sink the isa into the assert
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224291
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 23:29:37 +0000 (23:29 +0000)]
[Hexagon] Adding halfword to doubleword multiplies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224289
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 23:19:07 +0000 (23:19 +0000)]
[Hexagon] Adding logical-logical accumulation instructions and tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224288
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Mon, 15 Dec 2014 22:50:15 +0000 (22:50 +0000)]
Teach ScalarEvolution to exploit min and max expressions when proving
isKnownPredicate.
The motivation for this change is to optimize away checks in loops
like this:
limit = min(t, len)
for (i = 0 to limit)
if (i >= len || i < 0) throw_array_of_of_bounds();
a[i] = ...
Differential Revision: http://reviews.llvm.org/D6635
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224285
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 15 Dec 2014 22:45:48 +0000 (22:45 +0000)]
Added missing tests for X86vzmovl folding. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224284
91177308-0d34-0410-b5e6-
96231b3b80d8
JF Bastien [Mon, 15 Dec 2014 22:34:58 +0000 (22:34 +0000)]
x86: Emit LOCK prefix after DATA16
Summary: x86 allows either ordering for the LOCK and DATA16 prefixes, but using GCC+GAS leads to different code generation than using LLVM. This change matches the order that GAS emits the x86 prefixes when a semicolon isn't used in inline assembly (see tc-i386.c comment before define LOCK_PREFIX), and helps simplify tooling that operates on the instruction's byte sequence (such as NaCl's validator). This change shouldn't have any performance impact.
Test Plan: ninja check
Reviewers: craig.topper, jvoung
Subscribers: jfb, llvm-commits
Differential Revision: http://reviews.llvm.org/D6630
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224283
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 22:10:37 +0000 (22:10 +0000)]
[Hexagon] Adding a number of additional multiply forms with tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224282
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Ilseman [Mon, 15 Dec 2014 21:47:09 +0000 (21:47 +0000)]
Clean up warning about unused variable
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224281
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Mon, 15 Dec 2014 21:36:35 +0000 (21:36 +0000)]
Revert "LiveRangeCalc: Rewrite subrange calculation"
Revert until I find out why non-subreg enabled targets break.
This reverts commit
6097277eefb9c5fb35a7f493c783ee1fd1b9d6a7.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224278
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Ilseman [Mon, 15 Dec 2014 21:36:29 +0000 (21:36 +0000)]
Revert of r223763, in spirit.
r223763 was made to work around a temporary issue where a user of the
JIT was passing down a declaration (incorrectly). This shouldn't
occur, so assert rather than silently continue.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224277
91177308-0d34-0410-b5e6-
96231b3b80d8
Mark Heffernan [Mon, 15 Dec 2014 21:19:53 +0000 (21:19 +0000)]
Clarify HowFarToZero computation when the step is a positive power of two. Functionally this should be identical to the existing code except for the case where Step is maximally negative (eg, INT_MIN). We now punt in that one corner case to make reasoning about the code easier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224274
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 21:17:03 +0000 (21:17 +0000)]
[Hexagon] Adding misc multiply encodings and tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224273
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Mon, 15 Dec 2014 21:16:21 +0000 (21:16 +0000)]
LiveRangeCalc: Rewrite subrange calculation
This changes subrange calculation to calculate subranges sequentially
instead of in parallel. The code is easier to understand that way and
addresses the code review issues raised about LiveOutData being
hard to understand/needing more comments by removing them :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224272
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 20:17:46 +0000 (20:17 +0000)]
[Hexagon] Adding doubleworld accumulating multiplies of halfwords.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224267
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 20:10:28 +0000 (20:10 +0000)]
[Hexagon] Adding accumulating half word multiplies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224266
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 20:01:59 +0000 (20:01 +0000)]
[Hexagon] Adding multiply with rnd/sat/rndsat
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224265
91177308-0d34-0410-b5e6-
96231b3b80d8
Ahmed Bougacha [Mon, 15 Dec 2014 19:47:35 +0000 (19:47 +0000)]
[X86] And also test INSERTPS shuffle mask pretty-printing.
For r224260.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224264
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Mon, 15 Dec 2014 19:40:46 +0000 (19:40 +0000)]
LiveRangeCalc: use more range based for loops; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224263
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 15 Dec 2014 19:22:07 +0000 (19:22 +0000)]
[Hexagon] Adding encoding bits for halfword multiplies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224261
91177308-0d34-0410-b5e6-
96231b3b80d8
Ahmed Bougacha [Mon, 15 Dec 2014 19:17:54 +0000 (19:17 +0000)]
[X86] Also pretty-print shuffle mask for INSERTPS rm variants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224260
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Mon, 15 Dec 2014 19:07:53 +0000 (19:07 +0000)]
IR: Make metadata typeless in assembly
Now that `Metadata` is typeless, reflect that in the assembly. These
are the matching assembly changes for the metadata/value split in
r223802.
- Only use the `metadata` type when referencing metadata from a call
intrinsic -- i.e., only when it's used as a `Value`.
- Stop pretending that `ValueAsMetadata` is wrapped in an `MDNode`
when referencing it from call intrinsics.
So, assembly like this:
define @foo(i32 %v) {
call void @llvm.foo(metadata !{i32 %v}, metadata !0)
call void @llvm.foo(metadata !{i32 7}, metadata !0)
call void @llvm.foo(metadata !1, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{metadata !3}, metadata !0)
ret void, !bar !2
}
!0 = metadata !{metadata !2}
!1 = metadata !{i32* @global}
!2 = metadata !{metadata !3}
!3 = metadata !{}
turns into this:
define @foo(i32 %v) {
call void @llvm.foo(metadata i32 %v, metadata !0)
call void @llvm.foo(metadata i32 7, metadata !0)
call void @llvm.foo(metadata i32* @global, metadata !0)
call void @llvm.foo(metadata !3, metadata !0)
call void @llvm.foo(metadata !{!3}, metadata !0)
ret void, !bar !2
}
!0 = !{!2}
!1 = !{i32* @global}
!2 = !{!3}
!3 = !{}
I wrote an upgrade script that handled almost all of the tests in llvm
and many of the tests in cfe (even handling many `CHECK` lines). I've
attached it (or will attach it in a moment if you're speedy) to PR21532
to help everyone update their out-of-tree testcases.
This is part of PR21532.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224257
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Ilseman [Mon, 15 Dec 2014 18:48:43 +0000 (18:48 +0000)]
Silence more static analyzer warnings.
Add in definedness checks for shift operators, null checks when
pointers are assumed by the code to be non-null, and explicit
unreachables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224255
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 15 Dec 2014 17:56:02 +0000 (17:56 +0000)]
Move mips1 tests to test/MC/Disassembler/Mips/mips1
This matches the pattern of the mips2 and 3 tests, as well as our normal
conventions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224254
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Mon, 15 Dec 2014 16:19:34 +0000 (16:19 +0000)]
Add disassembler tests for mips3 platform. There are no functional changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224253
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Mon, 15 Dec 2014 15:58:20 +0000 (15:58 +0000)]
Add disassembler tests for mips2 platform. There are no functional changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224252
91177308-0d34-0410-b5e6-
96231b3b80d8
Vladimir Medic [Mon, 15 Dec 2014 15:22:33 +0000 (15:22 +0000)]
This is the first in a series of patches that add missing disassembler tests for mips platform. The patches are divided per version of mips CPU to keep the patches smaller and ease the review. There are no functional changes, code is changed only if new tests reveal a bug.This patch adds disassembler tests for mips1 CPU.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224251
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Mon, 15 Dec 2014 14:25:12 +0000 (14:25 +0000)]
Changing a cast from unsigned to uint64_t, should be NFC in practice.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224249
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 15 Dec 2014 14:14:10 +0000 (14:14 +0000)]
Added a test related to 224247 revision
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224248
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 15 Dec 2014 14:09:53 +0000 (14:09 +0000)]
Sink store based on alias analysis
- by Ella Bolshinsky
The alias analysis is used define whether the given instruction
is a barrier for store sinking. For 2 identical stores, following
instructions are checked in the both basic blocks, to determine
whether they are sinking barriers.
http://reviews.llvm.org/D6420
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224247
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Mon, 15 Dec 2014 13:18:21 +0000 (13:18 +0000)]
[X86] Break false dependencies before partial register updates when the source operand is in memory
Adds the various "rm" instruction variants into the list of instructions that have a partial register update. Also adds all variants of SQRTSD that were missing in the original list.
Differential Revision: http://reviews.llvm.org/D6620
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224246
91177308-0d34-0410-b5e6-
96231b3b80d8
Suyog Sarda [Mon, 15 Dec 2014 12:19:46 +0000 (12:19 +0000)]
Typo Correction in Test Case. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224244
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 15 Dec 2014 10:03:52 +0000 (10:03 +0000)]
AVX-512: Added EXPAND instructions and intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224241
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Mon, 15 Dec 2014 04:45:43 +0000 (04:45 +0000)]
Fix line mapping information in LLVM JIT profiling with Vtune
The line mapping information for dynamic code is reported incorrectly. It causes VTune to map LLVM generated code to source lines incorrectly. This patch fix this issue.
Patch by Denis Pravdin.
Differential Revision: http://reviews.llvm.org/D6603
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224229
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 15 Dec 2014 01:19:53 +0000 (01:19 +0000)]
ThreadLocal: Move Unix-specific code out of Support/ThreadLocal.cpp
Just a cleanup, no functionality change is intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224227
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 15 Dec 2014 01:04:49 +0000 (01:04 +0000)]
StringPool: Cleanup typos in unittest comments
No functional change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224226
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 15 Dec 2014 01:04:45 +0000 (01:04 +0000)]
ThreadLocal: Return a mutable pointer if templated with a non-const type
It makes more sense for ThreadLocal<const T>::get to return a const T*
and ThreadLocal<T>::get to return a T*.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224225
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 15 Dec 2014 00:40:07 +0000 (00:40 +0000)]
Use unique_ptr to remove explicit delete.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224224
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Sun, 14 Dec 2014 09:43:50 +0000 (09:43 +0000)]
Loop Vectorizer minor changes in the code -
some comments, function names, identation.
Reviewed here: http://reviews.llvm.org/D6527
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224218
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sun, 14 Dec 2014 09:41:56 +0000 (09:41 +0000)]
APInt: udivrem should use machine instructions for single-word APInts
This mirrors the behavior of APInt::udiv and APInt::urem. Some
architectures, like X86, have a single instruction which can compute
both division and remainder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224217
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Sun, 14 Dec 2014 09:12:33 +0000 (09:12 +0000)]
ScalarEvolution: Remove SCEVUDivision, it's unused
This is just a code simplification, no functionality change is intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224216
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Sun, 14 Dec 2014 05:53:19 +0000 (05:53 +0000)]
[PowerPC] Handle cmp op promotion for SELECT[_CC] nodes in PPCTL::DAGCombineExtBoolTrunc
PPCTargetLowering::DAGCombineExtBoolTrunc contains logic to remove unwanted
truncations and extensions when dealing with nodes of the form:
zext(binary-ops(binary-ops(trunc(x), trunc(y)), ...)
There was a FIXME in the implementation (now removed) regarding the fact that
the function would abort the transformations if any of the non-output operands
of a SELECT or SELECT_CC node would need to be promoted (because they were
also output operands, for example). As a result, we continued to generate
unnecessary zero-extends for code such as this:
unsigned foo(unsigned a, unsigned b) {
return (a <= b) ? a : b;
}
which would produce:
cmplw 0, 3, 4
isel 3, 4, 3, 1
rldicl 3, 3, 0, 32
blr
and now we produce:
cmplw 0, 3, 4
isel 3, 4, 3, 1
blr
which is better in the obvious way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224213
91177308-0d34-0410-b5e6-
96231b3b80d8
Ahmed Bougacha [Sat, 13 Dec 2014 23:22:12 +0000 (23:22 +0000)]
Reapply "[ARM] Combine base-updating/post-incrementing vector load/stores."
r223862 tried to also combine base-updating load/stores.
r224198 reverted it, as "it created a regression on the test-suite
on test MultiSource/Benchmarks/Ptrdist/anagram by scrambling the order
in which the words are shown."
Reapply, with a fix to ignore non-normal load/stores.
Truncstores are handled elsewhere (you can actually write a pattern for
those, whereas for postinc loads you can't, since they return two values),
but it should be possible to also combine extloads base updates, by checking
that the memory (rather than result) type is of the same size as the addend.
Original commit message:
We used to only combine intrinsics, and turn them into VLD1_UPD/VST1_UPD
when the base pointer is incremented after the load/store.
We can do the same thing for generic load/stores.
Note that we can only combine the first load/store+adds pair in
a sequence (as might be generated for a v16f32 load for instance),
because other combines turn the base pointer addition chain (each
computing the address of the next load, from the address of the last
load) into independent additions (common base pointer + this load's
offset).
Differential Revision: http://reviews.llvm.org/D6585
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224203
91177308-0d34-0410-b5e6-
96231b3b80d8
Renato Golin [Sat, 13 Dec 2014 20:23:18 +0000 (20:23 +0000)]
Revert "[ARM] Combine base-updating/post-incrementing vector load/stores."
This reverts commit r223862, as it created a regression on the test-suite
on test MultiSource/Benchmarks/Ptrdist/anagram by scrambling the order
in which the words are shown. We'll investigate the issue and re-apply
when safe.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224198
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sat, 13 Dec 2014 19:19:07 +0000 (19:19 +0000)]
Fix Doxygen command misspellings.
Found by -Wdocumentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224197
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sat, 13 Dec 2014 16:55:02 +0000 (16:55 +0000)]
Silencing a -Wsign-compare warning; NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224195
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sat, 13 Dec 2014 16:53:15 +0000 (16:53 +0000)]
Silencing a *lot* of -Wsign-compare warnings; NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224194
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 13 Dec 2014 05:12:19 +0000 (05:12 +0000)]
Use range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224187
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Sat, 13 Dec 2014 04:52:04 +0000 (04:52 +0000)]
Rename argument strings of codegen passes to avoid collisions with command line
options.
This commit changes the command line arguments (PassInfo::PassArgument) of two
passes, MachineFunctionPrinter and MachineScheduler, to avoid collisions with
command line options that have the same argument strings.
This bug manifests when the PassList construct (defined in opt.cpp) is used
in a tool that links with codegen passes. To reproduce the bug, paste the
following lines into llc.cpp and run llc.
#include "llvm/IR/LegacyPassNameParser.h"
static llvm::cl::list<const llvm::PassInfo*, bool, llvm::PassNameParser>
PassList(llvm::cl::desc("Optimizations available:"));
rdar://problem/
19212448
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224186
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 13 Dec 2014 02:25:57 +0000 (02:25 +0000)]
Go bindings: introduce Value.ConstantAsMetadata.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224179
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 13 Dec 2014 02:25:54 +0000 (02:25 +0000)]
Go bindings: introduce llvm.TemporaryMDNode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224178
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 13 Dec 2014 02:25:51 +0000 (02:25 +0000)]
Go bindings: introduce Metadata.ReplaceAllUsesWith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224177
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 13 Dec 2014 02:25:49 +0000 (02:25 +0000)]
Go bindings: expose the Metadata type.
Also modifies SetCurrentDebugLocation to take individual arguments rather
than an MDNode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224176
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Sat, 13 Dec 2014 02:25:45 +0000 (02:25 +0000)]
Go bindings: remove contextless metadata bindings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224175
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Fri, 12 Dec 2014 23:59:36 +0000 (23:59 +0000)]
[PowerPC] Add a DAGToDAG peephole to remove unnecessary zero-exts
On PPC64, we end up with lots of i32 -> i64 zero extensions, not only from all
of the usual places, but also from the ABI, which specifies that values passed
are zero extended. Almost all 32-bit PPC instructions in PPC64 mode are defined
to do *something* to the higher-order bits, and for some instructions, that
action clears those bits (thus providing a zero-extended result). This is
especially common after rotate-and-mask instructions. Adding an additional
instruction to zero-extend the results of these instructions is unnecessary.
This PPCISelDAGToDAG peephole optimization examines these zero-extensions, and
looks back through their operands to see if all instructions will implicitly
zero extend their results. If so, we convert these instructions to their 64-bit
variants (which is an internal change only, the actual encoding of these
instructions is the same as the original 32-bit ones) and remove the
unnecessary zero-extension (changing where the INSERT_SUBREG instructions are
to make everything internally consistent).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224169
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 12 Dec 2014 23:59:29 +0000 (23:59 +0000)]
ValueTracking: Don't recurse too deeply in computeKnownBitsFromAssume
Respect the MaxDepth recursion limit, doing otherwise will trigger an
assert in computeKnownBits.
This fixes PR21891.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224168
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Fri, 12 Dec 2014 23:27:40 +0000 (23:27 +0000)]
[ARMConstantIsland] Insert tbb/tbh optimization where previous jump table resided.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224165
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Fri, 12 Dec 2014 22:27:53 +0000 (22:27 +0000)]
Pass EC by reference to MemoryBufferMMapFile to return error code.
Patch by Kim Grasman!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224159
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 12 Dec 2014 21:52:44 +0000 (21:52 +0000)]
utils: update vim syntax highlighting for LLVM IR
Add missing externally_initialized keyword from SVN r174340. Also reflow the
text.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224155
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Ilseman [Fri, 12 Dec 2014 21:48:03 +0000 (21:48 +0000)]
Clean up static analyzer warnings.
Clang's static analyzer found several potential cases of undefined
behavior, use of un-initialized values, and potentially null pointer
dereferences in tablegen, Support, MC, and ADT. This cleans them up
with specific assertions on the assumptions of the code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224154
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Fri, 12 Dec 2014 21:29:25 +0000 (21:29 +0000)]
[Hexagon] Adding double word add/min/minu/max/maxu instructions and tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224153
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Fri, 12 Dec 2014 21:25:07 +0000 (21:25 +0000)]
Revert r224149, llvm-dsymutil was already here.
I saw a failure on an internal bot, opened this file, saw it was missing,
thought "aha!", tried to land, got an "file is out of date", synced, didn't see
the file listed right above the line I added (cause I didn't add it in the
right place) and landed. Apologies!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224152
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Fri, 12 Dec 2014 21:12:27 +0000 (21:12 +0000)]
[Hexagon] Adding J class call instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224150
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Fri, 12 Dec 2014 20:56:49 +0000 (20:56 +0000)]
Add llvm-dsymutil to test/CMakeLists.txt
r224134 added this and runs it from a test, but doesn't build it with test
binaries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224149
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Fri, 12 Dec 2014 19:24:33 +0000 (19:24 +0000)]
IR: Don't track nullptr on metadata RAUW
The RAUW support in `Metadata` supports going to `nullptr` specifically
to handle values being deleted, causing `ValueAsMetadata` to be deleted.
Fix the case where the reference is from a `TrackingMDRef` (as opposed
to an `MDOperand` or a `MetadataAsValue`).
This is surprisingly rare -- metadata tracked by `TrackingMDRef` going
to null -- but it came up in an openSUSE bootstrap during inlining. The
tracking ref was held by the `ValueMap` because it was referencing a
local, the basic block containing the local became dead after it had
been merged in, and when the local was deleted, the tracking ref
asserted in an `isa`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224146
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 19:12:42 +0000 (19:12 +0000)]
MAP_FILE is the default. We don't need to add it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224144
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 12 Dec 2014 18:52:07 +0000 (18:52 +0000)]
Relax debug-map-parsing.test error message check for Windows
On Windows we get the string "no such file or directory".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224141
91177308-0d34-0410-b5e6-
96231b3b80d8
Steven Wu [Fri, 12 Dec 2014 18:48:37 +0000 (18:48 +0000)]
More code format fix from r224133, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224140
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 18:37:43 +0000 (18:37 +0000)]
Remove silly left over from the Windows resize_file implementation.
I didn't notice the problem first because on a non debug build the CRT was
just exiting the process without any message.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224139
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 18:13:23 +0000 (18:13 +0000)]
Move the resize file feature from mapped_file_region to the only user.
This removes a duplicated stat on every file that llvm-ar looks at.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224138
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 17:55:12 +0000 (17:55 +0000)]
Pass a FD to resise_file and add a testcase.
I will add a real use in another commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224136
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 17:35:34 +0000 (17:35 +0000)]
Remove unused feature. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224135
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederic Riss [Fri, 12 Dec 2014 17:31:24 +0000 (17:31 +0000)]
Initial dsymutil tool commit.
The goal of this tool is to replicate Darwin's dsymutil functionality
based on LLVM. dsymutil is a DWARF linker. Darwin's linker (ld64) does
not link the debug information, it leaves it in the object files in
relocatable form, but embbeds a `debug map` into the executable that
describes where to find the debug information and how to relocate it.
When releasing/archiving a binary, dsymutil is called to link all the DWARF
information into a `dsym bundle` that can distributed/stored along with
the binary.
With this commit, the LLVM based dsymutil is just able to parse the STABS
debug maps embedded by ld64 in linked binaries (and not all of them, for
example archives aren't supported yet).
Note that the tool directory is called dsymutil, but the executable is
currently called llvm-dsymutil. This discrepancy will disappear once the
tool will be feature complete. At this point the executable will be renamed
to dsymutil, but until then you do not want it to override the system one.
Differential Revision: http://reviews.llvm.org/D6242
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224134
91177308-0d34-0410-b5e6-
96231b3b80d8
Steven Wu [Fri, 12 Dec 2014 17:21:54 +0000 (17:21 +0000)]
Restructure code from r224097. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224133
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Khasanov [Fri, 12 Dec 2014 17:02:18 +0000 (17:02 +0000)]
[AVX512] Enabling bit logic lowering
Added lowering tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224132
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 15:32:23 +0000 (15:32 +0000)]
Now that we require a newer python, use the new exception syntax.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224130
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 15:29:31 +0000 (15:29 +0000)]
Require python 2.7.
We were already requiring 2.5, which meant that people on old linux distros
had to upgrade anyway.
Requiring python 2.6 will make supporting 3.X easier as we can use the 3.X
exception syntax.
According to the discussion on llvmdev, there is not much value is requiring
just 2.6, we may as well just require 2.7.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224129
91177308-0d34-0410-b5e6-
96231b3b80d8
Vasileios Kalintiris [Fri, 12 Dec 2014 15:16:46 +0000 (15:16 +0000)]
[mips] Enable code generation for MIPS-III.
Summary:
This commit enables the MIPS-III target and adds support for code
generation of SELECT nodes. We have to use pseudo-instructions with
custom inserters for these nodes as MIPS-III CPUs do not have
conditional-move instructions.
Depends on D6212
Reviewers: dsanders
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D6464
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224128
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Khasanov [Fri, 12 Dec 2014 15:10:43 +0000 (15:10 +0000)]
[AVX512] Enabling MIN/MAX lowering.
Added lowering tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224127
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Fri, 12 Dec 2014 15:09:58 +0000 (15:09 +0000)]
Reapply "[MachineScheduler] Fix for PR21807: minor code difference building with/without -g."
This reapplies r224118 with a fix for test 'misched-code-difference-with-debug.ll'.
That test was failing on some buildbots because it was x86 specific but it was
missing a target triple.
Added an explicit triple to test misched-code-difference-with-debug.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224126
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Fri, 12 Dec 2014 14:44:12 +0000 (14:44 +0000)]
[Reassociate] Use dbgs() instead of errs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224125
91177308-0d34-0410-b5e6-
96231b3b80d8
Vasileios Kalintiris [Fri, 12 Dec 2014 14:41:37 +0000 (14:41 +0000)]
[mips] Support SELECT nodes for targets that don't have conditional-move instructions.
Summary:
For Mips targets that do not have conditional-move instructions, ie. targets
before MIPS32 and MIPS-IV, we have to insert a diamond control-flow
pattern in order to support SELECT nodes. In order to do that, we add
pseudo-instructions with a custom inserter that emits the necessary
control-flow that selects the correct value.
With this patch we add complete support for code generation of Mips-II targets
based on the LLVM test-suite.
Reviewers: dsanders
Reviewed By: dsanders
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D6212
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224124
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Fri, 12 Dec 2014 14:28:19 +0000 (14:28 +0000)]
Disable --icf=safe to avoid a bug.
Thanks to Sameer Sahasrabuddhe for the report!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224123
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Khasanov [Fri, 12 Dec 2014 14:21:30 +0000 (14:21 +0000)]
[AVX512] Minor fix in lowering pattern for broadcast intrustions.
No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224122
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Fri, 12 Dec 2014 13:34:03 +0000 (13:34 +0000)]
Revert: [MachineScheduler] Fix for PR21807: minor code difference building with/without -g.
Test 'misched-code-difference-with-debug.ll' was failing on some buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224121
91177308-0d34-0410-b5e6-
96231b3b80d8