oota-llvm.git
10 years agoSupport: Don't call close again if we get EINTR
David Majnemer [Tue, 7 Oct 2014 05:48:40 +0000 (05:48 +0000)]
Support: Don't call close again if we get EINTR

Most Unix-like operating systems guarantee that the file descriptor is
closed after a call to close(2), even if close comes back with EINTR.
For these systems, calling close _again_ will either do nothing or close
some other file descriptor open(2)'d by another thread. (Linux)

However, some operating systems do not have this behavior.  They require
at least another call to close(2) before guaranteeing that the
descriptor is closed. (HP-UX)

And some operating systems have an unpredictable blend of the two
behaviors! (xnu)

Avoid this disaster by blocking all signals before we call close(2).
This ensures that a signal will not be delivered to the thread and
close(2) will not give us back EINTR.  We restore the signal mask once
the operation is done.

N.B. This isn't a problem on Windows, it doesn't have a notion of EINTR
because signals always get delivered to dedicated signal handling
threads.

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

10 years agogold plugin: Handle gold selecting a linkonce GV when a weak is present.
Rafael Espindola [Tue, 7 Oct 2014 04:06:13 +0000 (04:06 +0000)]
gold plugin: Handle gold selecting a linkonce GV when a weak is present.

The plugin API doesn't have the notion of linkonce, only weak. It is up to the
plugin to figure out if a symbol used only for the symbol table can be dropped.
In particular, it has to avoid dropping a linkonce_odr selected by gold if there
is also a weak_odr.

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

10 years ago[FastISel][AArch64] Teach the address computation code to also fold sign-/zero-extends.
Juergen Ributzka [Tue, 7 Oct 2014 03:40:06 +0000 (03:40 +0000)]
[FastISel][AArch64] Teach the address computation code to also fold sign-/zero-extends.

The code already folds sign-/zero-extends, but only if they are arguments to
mul and shift instructions. This extends the code to also fold them when they
are direct inputs.

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

10 years ago[FastISel][AArch64] Teach the address computation to also fold sub instructions.
Juergen Ributzka [Tue, 7 Oct 2014 03:40:03 +0000 (03:40 +0000)]
[FastISel][AArch64] Teach the address computation to also fold sub instructions.

Tiny enhancement to the address computation code to also fold sub instructions
if the rhs is constant and can be folded into the offset.

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

10 years ago[FastISel][AArch64] Fix "Fold sign-/zero-extends into the load instruction."
Juergen Ributzka [Tue, 7 Oct 2014 03:39:59 +0000 (03:39 +0000)]
[FastISel][AArch64] Fix "Fold sign-/zero-extends into the load instruction."

This commit fixes an issue with sign-/zero-extending loads that was discovered
by Richard Barton.

We use now the correct load instructions for sign-extending loads to 64bit. Also
updated and added more unit tests.

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

10 years agogold plugin: create internal replacement with original linkage first.
Rafael Espindola [Tue, 7 Oct 2014 03:19:55 +0000 (03:19 +0000)]
gold plugin: create internal replacement with original linkage first.

The call to copyAttributesFrom will copy the visibility, which might assert
if it were to produce something invalid like "internal hidden". We avoid it
by first creating the replacement with the original linkage and then setting
it to internal affter the call to copyAttributesFrom.

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

10 years agogold plugin: Remap function arguments when creating a replacement function.
Rafael Espindola [Tue, 7 Oct 2014 00:47:38 +0000 (00:47 +0000)]
gold plugin: Remap function arguments when creating a replacement function.

When creating an internal function replacement for use in an alias we were
not remapping the argument uses in the instructions to point to the new
arguments.

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

10 years ago[InstCombine] re-commit r218721 icmp-select-icmp optimization
Gerolf Hoflehner [Tue, 7 Oct 2014 00:16:12 +0000 (00:16 +0000)]
[InstCombine] re-commit r218721 icmp-select-icmp optimization

Takes care of the assert that caused build fails.
Rather than asserting the code checks now that the definition
and use are in the same block, and does not attempt
to optimize when that is not the case.

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

10 years agoARMInstPrinter.cpp: Suppress a warning for -Asserts. [-Wunused-variable]
NAKAMURA Takumi [Mon, 6 Oct 2014 23:48:04 +0000 (23:48 +0000)]
ARMInstPrinter.cpp: Suppress a warning for -Asserts. [-Wunused-variable]

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

10 years agollvm/test/lit.cfg: Suppress dwarf stuff for targeting x86_64-mingw32 while investigat...
NAKAMURA Takumi [Mon, 6 Oct 2014 23:29:06 +0000 (23:29 +0000)]
llvm/test/lit.cfg: Suppress dwarf stuff for targeting x86_64-mingw32 while investigating since r219108.

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

10 years agoSupport: Add a utility to remap std{in,out,err} to /dev/null if closed
David Majnemer [Mon, 6 Oct 2014 23:16:18 +0000 (23:16 +0000)]
Support: Add a utility to remap std{in,out,err} to /dev/null if closed

It's possible to start a program with one (or all) of the standard file
descriptors closed.  Subsequent open system calls will give the program
a low-numbered file descriptor.

This is problematic because we may believe we are writing to standard
out instead of a file.

Introduce Process::FixupStandardFileDescriptors, a helper function to
remap standard file descriptors to /dev/null if they were closed before
the program started.

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

10 years agoRecognize aarch64_be as valid architecture.
Joerg Sonnenberger [Mon, 6 Oct 2014 23:05:04 +0000 (23:05 +0000)]
Recognize aarch64_be as valid architecture.

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

10 years agorange-for some loops in DAE
David Blaikie [Mon, 6 Oct 2014 22:59:29 +0000 (22:59 +0000)]
range-for some loops in DAE

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

10 years agoLoopUnroll: Change code order of changes to new basic blocks
Duncan P. N. Exon Smith [Mon, 6 Oct 2014 22:05:02 +0000 (22:05 +0000)]
LoopUnroll: Change code order of changes to new basic blocks

Add new basic blocks to `LoopInfo` earlier.  No functionality change
intended (simplifies upcoming bugfix patch).

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

10 years agoSink comment, NFC
Duncan P. N. Exon Smith [Mon, 6 Oct 2014 22:04:59 +0000 (22:04 +0000)]
Sink comment, NFC

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

10 years ago[DAGCombine] Remove SIGN_EXTEND-related inf-loop
Hal Finkel [Mon, 6 Oct 2014 20:19:47 +0000 (20:19 +0000)]
[DAGCombine] Remove SIGN_EXTEND-related inf-loop

The patch's author points out that, despite the function's documentation,
getSetCCResultType is only used to get the SETCC result type (with one
here-removed problematic exception). In one case, getSetCCResultType was being
used to get the predicate type to use for a SELECT node, and then
SIGN_EXTENDing (or truncating) to get the input predicate to match that type.
Unfortunately, this was happening inside visitSIGN_EXTEND, and creating new
SIGN_EXTEND nodes was causing an infinite loop. In addition, this behavior was
wrong if a target was not using ZeroOrNegativeOneBooleanContent. Lastly, the
extension/truncation seems unnecessary here: SELECT is defined as:

  Select(COND, TRUEVAL, FALSEVAL). If the type of the boolean COND is not i1
  then the high bits must conform to getBooleanContents.

So here we remove this use of getSetCCResultType and update
getSetCCResultType's documentation to reflect its actual uses.

Patch by deadal nix!

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

10 years agoFast-math fold: x / (y * sqrt(z)) -> x * (rsqrt(z) / y)
Sanjay Patel [Mon, 6 Oct 2014 19:31:18 +0000 (19:31 +0000)]
Fast-math fold:  x / (y * sqrt(z)) -> x * (rsqrt(z) / y)

The motivation is to recognize code such as this from /llvm/projects/test-suite/SingleSource/Benchmarks/BenchmarkGame/n-body.c:

float distance = sqrt(dx * dx + dy * dy + dz * dz);
float mag = dt / (distance * distance * distance);

Without this patch, we don't match the sqrt as a reciprocal sqrt, so for PPC the new testcase in this patch produces:

   addis 3, 2, .LCPI4_2@toc@ha
   lfs 4, .LCPI4_2@toc@l(3)
   addis 3, 2, .LCPI4_1@toc@ha
   lfs 0, .LCPI4_1@toc@l(3)
   fcmpu 0, 1, 4
   beq 0, .LBB4_2
# BB#1:
   frsqrtes 4, 1
   addis 3, 2, .LCPI4_0@toc@ha
   lfs 5, .LCPI4_0@toc@l(3)
   fnmsubs 13, 1, 5, 1
   fmuls 6, 4, 4
   fmadds 1, 13, 6, 5
   fmuls 1, 4, 1
   fres 4, 1                <--- reciprocal of reciprocal square root
   fnmsubs 1, 1, 4, 0
   fmadds 4, 4, 1, 4
.LBB4_2:
   fmuls 1, 4, 2
   fres 2, 1
   fnmsubs 0, 1, 2, 0
   fmadds 0, 2, 0, 2
   fmuls 1, 3, 0
   blr

After the patch, this simplifies to:

frsqrtes 0, 1
addis 3, 2, .LCPI4_1@toc@ha
fres 5, 2
lfs 4, .LCPI4_1@toc@l(3)
addis 3, 2, .LCPI4_0@toc@ha
lfs 7, .LCPI4_0@toc@l(3)
fnmsubs 13, 1, 4, 1
fmuls 6, 0, 0
fnmsubs 2, 2, 5, 7
fmadds 1, 13, 6, 4
fmadds 2, 5, 2, 5
fmuls 0, 0, 1
fmuls 0, 0, 2
fmuls 1, 3, 0
blr

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

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

10 years ago[BasicAA] Revert "Revert r218714 - Make better use of zext and sign information."
Hal Finkel [Mon, 6 Oct 2014 18:37:59 +0000 (18:37 +0000)]
[BasicAA] Revert "Revert r218714 - Make better use of zext and sign information."

This reverts r218944, which reverted r218714, plus a bug fix.

Description of the bug in r218714 (by Nick)

The original patch forgot to check if the Scale in VariableGEPIndex flipped the
sign of the variable. The BasicAA pass iterates over the instructions in the
order they appear in the function, and so BasicAliasAnalysis::aliasGEP is
called with the variable it first comes across as parameter GEP1. Adding a
%reorder label puts the definition of %a after %b so aliasGEP is called with %b
as the first parameter and %a as the second. aliasGEP later calculates that %a
== %b + 1 - %idxprom where %idxprom >= 0 (if %a was passed as the first
parameter it would calculate %b == %a - 1 + %idxprom where %idxprom >= 0) -
ignoring that %idxprom is scaled by -1 here lead the patch to incorrectly
conclude that %a > %b.

Revised patch by Nick White, thanks! Thanks to Lang to isolating the bug.
Slightly modified by me to add an early exit from the loop and avoid
unnecessary, but expensive, function calls.

Original commit message:

Two related things:

 1. Fixes a bug when calculating the offset in GetLinearExpression. The code
    previously used zext to extend the offset, so negative offsets were converted
    to large positive ones.

 2. Enhance aliasGEP to deduce that, if the difference between two GEP
    allocations is positive and all the variables that govern the offset are also
    positive (i.e. the offset is strictly after the higher base pointer), then
    locations that fit in the gap between the two base pointers are NoAlias.

Patch by Nick White!

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

10 years agoUpdate documentation with link to Sea Islands documentation
Matt Arsenault [Mon, 6 Oct 2014 18:31:09 +0000 (18:31 +0000)]
Update documentation with link to Sea Islands documentation

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

10 years agoBFI: Improve assertion message, since it's actually firing
Duncan P. N. Exon Smith [Mon, 6 Oct 2014 17:42:00 +0000 (17:42 +0000)]
BFI: Improve assertion message, since it's actually firing

This assertion is firing because -loop-unroll is failing to preserve
-loop-info (see PR20987).  Improve it.

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

10 years agoARM: silence unused variable warning
Tim Northover [Mon, 6 Oct 2014 17:26:36 +0000 (17:26 +0000)]
ARM: silence unused variable warning

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

10 years agoARM: remove dead InstPrinting code
Tim Northover [Mon, 6 Oct 2014 17:10:13 +0000 (17:10 +0000)]
ARM: remove dead InstPrinting code

This instruction form is handled by different AsmOperands now, so the code is
completely dead (and wrong anyway).

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

10 years agoMachObjectWriter: optimize the string table for common suffices
Hans Wennborg [Mon, 6 Oct 2014 17:05:19 +0000 (17:05 +0000)]
MachObjectWriter: optimize the string table for common suffices

This is a follow-up to r207670 (ELF) and r218636 (COFF).

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

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

10 years agoFix dumping codeview line tables when there are multiple debug sections
Timur Iskhodzhanov [Mon, 6 Oct 2014 16:59:44 +0000 (16:59 +0000)]
Fix dumping codeview line tables when there are multiple debug sections

Codeview line tables for functions in different sections refer to a common
STRING_TABLE_SUBSECTION for filenames.
This happens when building with -Gy or with inline functions with MSVC.

Original patch by Jeff Muizelaar!

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

10 years agoDbgValueHistoryCalculator: Store modified registers in a BitVector instead of std...
Benjamin Kramer [Mon, 6 Oct 2014 15:31:04 +0000 (15:31 +0000)]
DbgValueHistoryCalculator: Store modified registers in a BitVector instead of std::set.

And iterate over the smaller map instead of the larger set first.  Reduces the time spent in
calculateDbgValueHistory by 30-40%.

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

10 years ago[CFL-AA] Update for handling of globals and more tests
Hal Finkel [Mon, 6 Oct 2014 14:42:56 +0000 (14:42 +0000)]
[CFL-AA] Update for handling of globals and more tests

We used to return PartialAlias if *either* variable being queried interacted
with arguments or globals. AFAICT, we can change this to only returning
MayAlias iff *both* variables being queried interacted with arguments or
globals.

Also, adding some basic functionality tests: some basic IPA tests, checking
that we give conservative responses with arguments/globals thrown in the mix,
and ensuring that we trace values through stores and loads.

Note that saying that 'x' interacted with arguments or globals means that the
Attributes of the StratifiedSet that 'x' belongs to has any bits set.

Patch by George Burgess IV, thanks!

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

10 years agoMake the MD5 result name consistent between functions, header and source.
Yaron Keren [Mon, 6 Oct 2014 13:48:07 +0000 (13:48 +0000)]
Make the MD5 result name consistent between functions, header and source.

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

10 years agoNote that a gold bug has been fixed.
Rafael Espindola [Mon, 6 Oct 2014 12:33:27 +0000 (12:33 +0000)]
Note that a gold bug has been fixed.

We should be able to stop working around it at some point in the future.

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

10 years agoX86: Drop the isConvertibleTo3Addr bit from shufps/shufpd now that we don't convert...
Benjamin Kramer [Mon, 6 Oct 2014 09:56:40 +0000 (09:56 +0000)]
X86: Drop the isConvertibleTo3Addr bit from shufps/shufpd now that we don't convert them anymore.

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

10 years agoFor biendian targets like ARM and AArch64, it is useful to have the
Eric Christopher [Mon, 6 Oct 2014 07:06:03 +0000 (07:06 +0000)]
For biendian targets like ARM and AArch64, it is useful to have the
output of the llvm-dwarfdump and llvm-objdump report the endianness
used when the object files were generated.

Patch by Charlie Turner.

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

10 years agoAdd support for ARM and AArch64 big endian objects to
Eric Christopher [Mon, 6 Oct 2014 07:02:58 +0000 (07:02 +0000)]
Add support for ARM and AArch64 big endian objects to
RelocVisitor.

Patch by Charlie Turner.

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

10 years agoRefactor RelocVisitor to take an object. This removes some
Eric Christopher [Mon, 6 Oct 2014 06:55:55 +0000 (06:55 +0000)]
Refactor RelocVisitor to take an object. This removes some
string comparisons and makes it a bit easier to check individual
targets.

Patch by Charlie Turner.

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

10 years agoAdd some tests for RelocVisitor.
Eric Christopher [Mon, 6 Oct 2014 06:52:52 +0000 (06:52 +0000)]
Add some tests for RelocVisitor.

Patch by Charlie Turner.

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

10 years agoAdd subtarget caches to aarch64, arm, ppc, and x86.
Eric Christopher [Mon, 6 Oct 2014 06:45:36 +0000 (06:45 +0000)]
Add subtarget caches to aarch64, arm, ppc, and x86.
These will make it easier to test further changes to the
code generation and optimization pipelines as those are
moved to subtargets initialized with target feature and
target cpu.

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

10 years agoResolve ambiguity between llvm::make_unique and std::make_unique.
Yaron Keren [Mon, 6 Oct 2014 06:39:57 +0000 (06:39 +0000)]
Resolve ambiguity between llvm::make_unique and std::make_unique.

Intorduced in r219098.

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

10 years agoDebugInfo: Sink constructImportedEntityDIE down into DwarfUnit from DwarfDebug.
David Blaikie [Mon, 6 Oct 2014 05:37:24 +0000 (05:37 +0000)]
DebugInfo: Sink constructImportedEntityDIE down into DwarfUnit from DwarfDebug.

It was just calling a bunch of DwarfUnit functions anyway, as can be
seen by the simplification of removing "TheCU" from all the function
calls in the implementation.

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

10 years ago[dwarfdump] Print the name for referenced specification of abstract_origin DIEs.
Frederic Riss [Mon, 6 Oct 2014 03:36:31 +0000 (03:36 +0000)]
[dwarfdump] Print the name for referenced specification of abstract_origin DIEs.

Reviewers: dblaikie, samsonov, echristo, aprantl

Subscribers: llvm-commits

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

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

10 years agoFactor the Unit section parsing into the DWARFUnitSection class.
Frederic Riss [Mon, 6 Oct 2014 03:36:18 +0000 (03:36 +0000)]
Factor the Unit section parsing into the DWARFUnitSection class.

Summary: No functional change.

Reviewers: dblaikie, samsonov

Subscribers: llvm-commits

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

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

10 years ago[PM] Remove an unused and rather expensive mapping from an analysis
Chandler Carruth [Mon, 6 Oct 2014 00:30:59 +0000 (00:30 +0000)]
[PM] Remove an unused and rather expensive mapping from an analysis
group's interface to all of the implementations of that analysis group.
The groups themselves can and do manage this anyways, the pass registry
needn't involve itself.

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

10 years ago[PM] Remove the (deeply misguided) 'unregister' functionality from the
Chandler Carruth [Mon, 6 Oct 2014 00:13:25 +0000 (00:13 +0000)]
[PM] Remove the (deeply misguided) 'unregister' functionality from the
pass registry.

This style of registry is somewhat questionable, but it being
non-monotonic is crazy. No one is (or should be) unloading DSOs with
passes and unregistering them here. I've checked with a few folks and
I don't know of anyone using this functionality or any important use
case where it is necessary.

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

10 years ago[cleanup] Switch to using range-based for loops in two very obvious
Chandler Carruth [Mon, 6 Oct 2014 00:06:48 +0000 (00:06 +0000)]
[cleanup] Switch to using range-based for loops in two very obvious
places.

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

10 years ago[cleanup] Fix up trailing whitespace and formatting in the pass regitsry
Chandler Carruth [Sun, 5 Oct 2014 23:59:03 +0000 (23:59 +0000)]
[cleanup] Fix up trailing whitespace and formatting in the pass regitsry
code prior to hacking on it more significantly.

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

10 years agoGive the Reassociate pass a bit more flexibility and autonomy when optimizing express...
Owen Anderson [Sun, 5 Oct 2014 23:41:26 +0000 (23:41 +0000)]
Give the Reassociate pass a bit more flexibility and autonomy when optimizing expressions.
Particularly, it addresses cases where Reassociate breaks Subtracts but then fails to optimize combinations like I1 + -I2 where I1 and I2 have the same rank and are identical.

Patch by Dmitri Shtilman.

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

10 years ago[x86] Remove the 2-addr-to-3-addr "optimization" from shufps to pshufd.
Chandler Carruth [Sun, 5 Oct 2014 22:57:31 +0000 (22:57 +0000)]
[x86] Remove the 2-addr-to-3-addr "optimization" from shufps to pshufd.

This trades a (register-renamer-friendly) movaps for a floating point
/ integer domain cross. That is a very bad trade, even on architectures
where domain crossing is relatively fast. On any chip where there is
even a cycle stall, this is a Very Bad Idea. It doesn't even seem likely
to cause a spill to be introduced because the reason for the copy is to
destructively shuffle in place.

Thanks to Ben Kramer for fixing a bug in this code that my new shuffle
lowering exposed and highlighting that perhaps it should just go away.
=]

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

10 years ago[x86, dag] Teach the DAG combiner to prune inputs toa vector_shuffle
Chandler Carruth [Sun, 5 Oct 2014 19:14:34 +0000 (19:14 +0000)]
[x86, dag] Teach the DAG combiner to prune inputs toa vector_shuffle
that are unused.

This allows the combiner to delete math feeding shuffles where the math
isn't actually necessary. This improves some of the vperm2x128 tests
that regressed when the vector shuffle lowering started actually
generating vperm instructions rather than forcibly decomposing them.

Sadly, this isn't enough to get this *really* right because we still
form a completely unnecessary permutation. To fix that, we also need to
fold shuffles which just rearrange concatenated or inserted subvectors.

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

10 years agoRemove unused map
David Blaikie [Sun, 5 Oct 2014 16:31:13 +0000 (16:31 +0000)]
Remove unused map

This became unnecessary/unused in r208636

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

10 years agoX86: Don't drop half of the mask when converting 2-address shufps into 3-address...
Benjamin Kramer [Sun, 5 Oct 2014 16:14:29 +0000 (16:14 +0000)]
X86: Don't drop half of the mask when converting 2-address shufps into 3-address pshufd.

It's debatable whether this transform is useful at all, but for now make sure
we don't generate invalid asm.

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

10 years agoAVX-512-SKX: Added instruction VPMOVM2B/W/D/Q.
Elena Demikhovsky [Sun, 5 Oct 2014 14:11:08 +0000 (14:11 +0000)]
AVX-512-SKX: Added instruction VPMOVM2B/W/D/Q.
This instruction allows to broadacst mask vector to data vector.

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

10 years agoSimplify code. No functionality change.
Benjamin Kramer [Sun, 5 Oct 2014 12:21:57 +0000 (12:21 +0000)]
Simplify code. No functionality change.

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

10 years ago[x86] Fix PR21139, one of the last remaining regressions found in the
Chandler Carruth [Sun, 5 Oct 2014 12:07:34 +0000 (12:07 +0000)]
[x86] Fix PR21139, one of the last remaining regressions found in the
new vector shuffle lowering.

This is loosely based on a patch by Marius Wachtler to the PR (thanks!).
I refactored it a bi to use std::count_if and a mutable array ref but
the core idea was exactly right. I also added some direct testing of
this case.

I believe PR21137 is now the only remaining regression.

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

10 years ago[x86] Teach the new vector shuffle lowering how to lower 128-bit
Chandler Carruth [Sun, 5 Oct 2014 11:41:36 +0000 (11:41 +0000)]
[x86] Teach the new vector shuffle lowering how to lower 128-bit
shuffles using AVX and AVX2 instructions. This fixes PR21138, one of the
few remaining regressions impacting benchmarks from the new vector
shuffle lowering.

You may note that it "regresses" many of the vperm2x128 test cases --
these were actually "improved" by the naive lowering that the new
shuffle lowering previously did. This regression gave me fits. I had
this patch ready-to-go about an hour after flipping the switch but
wasn't sure how to have the best of both worlds here and thought the
correct solution might be a completely different approach to lowering
these vector shuffles.

I'm now convinced this is the correct lowering and the missed
optimizations shown in vperm2x128 are actually due to missing
target-independent DAG combines. I've even written most of the needed
DAG combine and will submit it shortly, but this part is ready and
should help some real-world benchmarks out.

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

10 years agoHexagonMCCodeEmitter.cpp: Prune 2nd redundant \brief. [-Wdocumentation]
NAKAMURA Takumi [Sun, 5 Oct 2014 04:54:54 +0000 (04:54 +0000)]
HexagonMCCodeEmitter.cpp: Prune 2nd redundant \brief. [-Wdocumentation]

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

10 years ago[CMake] HexagonTests: Update LINK_COMPONENTS.
NAKAMURA Takumi [Sun, 5 Oct 2014 04:54:41 +0000 (04:54 +0000)]
[CMake] HexagonTests: Update LINK_COMPONENTS.

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

10 years agoHexagonDesc: Update LLVMBuild.txt.
NAKAMURA Takumi [Sun, 5 Oct 2014 04:54:29 +0000 (04:54 +0000)]
HexagonDesc: Update LLVMBuild.txt.

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

10 years ago[InstCombine] Simplify the logic from r219067 using ValueTracking
Hal Finkel [Sun, 5 Oct 2014 00:53:02 +0000 (00:53 +0000)]
[InstCombine] Simplify the logic from r219067 using ValueTracking

Joerg suggested on IRC that I look at generalizing the logic from r219067 to
handle more general redundancies (like removing an assume(x > 3) dominated by
an assume(x > 5)). The way to do this would be to ask ValueTracking to
determine the value of the i1 argument. It turns out that ValueTracking is not
very good at this right now (although it does get the trivial redundancy case)
because it does not understand ICmps. Nevertheless, the resulting code in
InstCombine is simpler than r219067, so we might as well do it now.

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

10 years ago[SystemZ] Make operator bool explicit. NFC.
Benjamin Kramer [Sat, 4 Oct 2014 22:44:35 +0000 (22:44 +0000)]
[SystemZ] Make operator bool explicit. NFC.

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

10 years agoMake AAMDNodes ctor and operator bool (!!!) explicit, mop up bugs and weirdness expos...
Benjamin Kramer [Sat, 4 Oct 2014 22:44:29 +0000 (22:44 +0000)]
Make AAMDNodes ctor and operator bool (!!!) explicit, mop up bugs and weirdness exposed by it.

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

10 years ago[InstCombine] Remove redundant @llvm.assume intrinsics
Hal Finkel [Sat, 4 Oct 2014 21:27:06 +0000 (21:27 +0000)]
[InstCombine] Remove redundant @llvm.assume intrinsics

For any @llvm.assume intrinsic, if there is another which dominates it and uses
the same condition, then it is redundant and can be removed. While this does
not alter the semantics of the @llvm.assume intrinsics, it makes subsequent
handling more efficient (and the resulting IR easier to read).

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

10 years agoSolve Visual C++ warning C4805 on getAsInteger<bool>.
Yaron Keren [Sat, 4 Oct 2014 19:58:30 +0000 (19:58 +0000)]
Solve Visual C++ warning C4805 on getAsInteger<bool>.

Fix http://llvm.org/PR21158 by adding a cast to unsigned long long,
so the comparison would be between two unsigned long longs instead
of bool and unsigned long long.

      if (getAsUnsignedInteger(*this, Radix, ULLVal) ||
          static_cast<unsigned long long>(static_cast<T>(ULLVal)) != ULLVal)

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

10 years agoRemove unnecessary copying or replace it with moves in a bunch of places.
Benjamin Kramer [Sat, 4 Oct 2014 16:55:56 +0000 (16:55 +0000)]
Remove unnecessary copying or replace it with moves in a bunch of places.

NFC.

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

10 years agoSink DwarfDebug::updateSubprogramScopeDIE into DwarfCompileUnit
David Blaikie [Sat, 4 Oct 2014 16:24:00 +0000 (16:24 +0000)]
Sink DwarfDebug::updateSubprogramScopeDIE into DwarfCompileUnit

This requires exposing some of the current function state from
DwarfDebug. I hope there's not too much of that to expose as I go
through all the functions, but it still seems nicer to expose singular
data down to multiple consumers, than have consumers expose raw mapping
data structures up to DwarfDebug for building subprograms.

Part of a series of refactoring to allow subprograms in both the
skeleton and dwo CUs under Fission.

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

10 years agoReformatting accidentally left out of r219057
David Blaikie [Sat, 4 Oct 2014 16:00:26 +0000 (16:00 +0000)]
Reformatting accidentally left out of r219057

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

10 years agoSink DwarfDebug::attachLowHighPC into DwarfCompileUnit
David Blaikie [Sat, 4 Oct 2014 15:58:47 +0000 (15:58 +0000)]
Sink DwarfDebug::attachLowHighPC into DwarfCompileUnit

One of many things to sink down into DwarfCompileUnit to allow handling
of subprograms in both the skeleton and dwo CU under Fission.

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

10 years agoMove DwarfCompileUnit from DwarfUnit.h to its own header (DwarfCompileUnit.h)
David Blaikie [Sat, 4 Oct 2014 15:49:50 +0000 (15:49 +0000)]
Move DwarfCompileUnit from DwarfUnit.h to its own header (DwarfCompileUnit.h)

In preparation for sinking all the subprogram emission code down from
DwarfDebug into DwarfCompileUnit, this will avoid bloating
DwarfUnit.h/cpp greatly and make concerns a bit more clear/isolated.

(sinking this handling down is part of the work to handle emitting
minimal subprograms for -gmlt-like data into the skeleton CU under
fission)

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

10 years agoDI: Fixup global syntax in example
Duncan P. N. Exon Smith [Sat, 4 Oct 2014 15:44:01 +0000 (15:44 +0000)]
DI: Fixup global syntax in example

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

10 years agoDI: Line up comments in examples
Duncan P. N. Exon Smith [Sat, 4 Oct 2014 15:35:25 +0000 (15:35 +0000)]
DI: Line up comments in examples

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

10 years agoDI: Fixup example IR from r219051
Duncan P. N. Exon Smith [Sat, 4 Oct 2014 15:31:08 +0000 (15:31 +0000)]
DI: Fixup example IR from r219051

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

10 years agoDI: Prune another example
Duncan P. N. Exon Smith [Sat, 4 Oct 2014 15:30:52 +0000 (15:30 +0000)]
DI: Prune another example

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

10 years agoDI: Update and prune metadata examples
Duncan P. N. Exon Smith [Sat, 4 Oct 2014 14:56:56 +0000 (14:56 +0000)]
DI: Update and prune metadata examples

Update a couple of the examples of debug info metadata, and prune the
rest.  Point to the true reference implementation in the source.

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

10 years ago[x86] Slap a triple on this test since it is poking around at the stack
Chandler Carruth [Sat, 4 Oct 2014 04:22:55 +0000 (04:22 +0000)]
[x86] Slap a triple on this test since it is poking around at the stack
and calling conventions. Otherwise its too hard to craft a usefully
generic set of assertions.

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

10 years ago[x86] Enable the new vector shuffle lowering by default.
Chandler Carruth [Sat, 4 Oct 2014 03:52:55 +0000 (03:52 +0000)]
[x86] Enable the new vector shuffle lowering by default.

Update the entire regression test suite for the new shuffles. Remove
most of the old testing which was devoted to the old shuffle lowering
path and is no longer relevant really. Also remove a few other random
tests that only really exercised shuffles and only incidently or without
any interesting aspects to them.

Benchmarking that I have done shows a few small regressions with this on
LNT, zero measurable regressions on real, large applications, and for
several benchmarks where the loop vectorizer fires in the hot path it
shows 5% to 40% improvements for SSE2 and SSE3 code running on Sandy
Bridge machines. Running on AMD machines shows even more dramatic
improvements.

When using newer ISA vector extensions the gains are much more modest,
but the code is still better on the whole. There are a few regressions
being tracked (PR21137, PR21138, PR21139) but by and large this is
expected to be a win for x86 generated code performance.

It is also more correct than the code it replaces. I have fuzz tested
this extensively with ISA extensions up through AVX2 and found no
crashes or miscompiles (yet...). The old lowering had a few miscompiles
and crashers after a somewhat smaller amount of fuzz testing.

There is one significant area where the new code path lags behind and
that is in AVX-512 support. However, there was *extremely little*
support for that already and so this isn't a significant step backwards
and the new framework will probably make it easier to implement lowering
that uses the full power of AVX-512's table-based shuffle+blend (IMO).

Many thanks to Quentin, Andrea, Robert, and others for benchmarking
assistance. Thanks to Adam and others for help with AVX-512. Thanks to
Hal, Eric, and *many* others for answering my incessant questions about
how the backend actually works. =]

I will leave the old code path in the tree until the 3 PRs above are at
least resolved to folks' satisfaction. Then I will rip it (and 1000s of
lines of code) out. =] I don't expect this flag to stay around for very
long. It may not survive next week.

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

10 years agoAdd fake use to suppress defined-but-unused warnings
Jingyue Wu [Sat, 4 Oct 2014 03:50:10 +0000 (03:50 +0000)]
Add fake use to suppress defined-but-unused warnings

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

10 years ago[x86] Fix a bug in the VZEXT DAG combine that I just made more powerful.
Chandler Carruth [Sat, 4 Oct 2014 02:51:03 +0000 (02:51 +0000)]
[x86] Fix a bug in the VZEXT DAG combine that I just made more powerful.

It turns out this combine was always somewhat flawed -- there are cases
where nested VZEXT nodes *can't* be combined: if their types have
a mismatch that can be observed in the result. While none of these show
up in currently, once I switch to the new vector shuffle lowering a few
test cases actually form such nested VZEXT nodes. I've not come up with
any IR pattern that I can sensible write to exercise this, but it will
be covered by tests once I flip the switch.

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

10 years ago[x86] Sink a generic combine of VZEXT nodes from the lowering to VZEXT
Chandler Carruth [Sat, 4 Oct 2014 01:05:48 +0000 (01:05 +0000)]
[x86] Sink a generic combine of VZEXT nodes from the lowering to VZEXT
nodes to the DAG combining of them.

This will allow the combine to fire on both old vector shuffle lowering
and the new vector shuffle lowering and generally seems like a cleaner
design. I've trimmed down the code a bit and tried to make it and the
surrounding combine fairly clean while moving it around.

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

10 years agoR600/SI: Custom lower f64 -> i64 conversions
Matt Arsenault [Fri, 3 Oct 2014 23:54:56 +0000 (23:54 +0000)]
R600/SI: Custom lower f64 -> i64 conversions

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

10 years agoR600: Custom lower [s|u]int_to_fp for i64 -> f64
Matt Arsenault [Fri, 3 Oct 2014 23:54:41 +0000 (23:54 +0000)]
R600: Custom lower [s|u]int_to_fp for i64 -> f64

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

10 years agoR600/SI: Fix ftrunc f64 conformance failures.
Matt Arsenault [Fri, 3 Oct 2014 23:54:27 +0000 (23:54 +0000)]
R600/SI: Fix ftrunc f64 conformance failures.

Re-add the tests since they were deleted at some point

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

10 years agoRemove unused ALL_BINDINGS configuration variable.
Peter Collingbourne [Fri, 3 Oct 2014 23:03:01 +0000 (23:03 +0000)]
Remove unused ALL_BINDINGS configuration variable.

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

10 years ago[x86] Add a really preposterous number of patterns for matching all of
Chandler Carruth [Fri, 3 Oct 2014 22:43:17 +0000 (22:43 +0000)]
[x86] Add a really preposterous number of patterns for matching all of
the various ways in which blends can be used to do vector element
insertion for lowering with the scalar math instruction forms that
effectively re-blend with the high elements after performing the
operation.

This then allows me to bail on the element insertion lowering path when
we have SSE4.1 and are going to be doing a normal blend, which in turn
restores the last of the blends lost from the new vector shuffle
lowering when I got it to prioritize insertion in other cases (for
example when we don't *have* a blend instruction).

Without the patterns, using blends here would have regressed
sse-scalar-fp-arith.ll *completely* with the new vector shuffle
lowering. For completeness, I've added RUN-lines with the new lowering
here. This is somewhat superfluous as I'm about to flip the default, but
hey, it shows that this actually significantly changed behavior.

The patterns I've added are just ridiculously repetative. Suggestions on
making them better very much welcome. In particular, handling the
commuted form of the v2f64 patterns is somewhat obnoxious.

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

10 years agoConverting the ErrorHandlerMutex to a ManagedStatic to avoid the static constructor...
Chris Bieneman [Fri, 3 Oct 2014 22:03:12 +0000 (22:03 +0000)]
Converting the ErrorHandlerMutex to a ManagedStatic to avoid the static constructor and destructor.

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

10 years ago[x86] Adjust the patterns for lowering X86vzmovl nodes which don't
Chandler Carruth [Fri, 3 Oct 2014 21:38:49 +0000 (21:38 +0000)]
[x86] Adjust the patterns for lowering X86vzmovl nodes which don't
perform a load to use blendps rather than movss when it is available.

For non-loads, blendps is *much* faster. It can execute on two ports in
Sandy Bridge and Ivy Bridge, and *three* ports on Haswell. This fixes
one of the "regressions" from aggressively taking the "insertion" path
in the new vector shuffle lowering.

This does highlight one problem with blendps -- it isn't commuted as
heavily as it should be. That's future work though.

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

10 years agoFix typo in TableGen documentation
Jonathan Roelofs [Fri, 3 Oct 2014 20:46:05 +0000 (20:46 +0000)]
Fix typo in TableGen documentation

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

10 years agoAdd unit tests to verify Hexagon emission.
Sid Manning [Fri, 3 Oct 2014 20:33:03 +0000 (20:33 +0000)]
Add unit tests to verify Hexagon emission.

Add the test cases I overlooked, part of the original commit,
http://reviews.llvm.org/D5523

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

10 years agoAdd a reference to Phabricator.rst to docs/index.rst.
Adrian Prantl [Fri, 3 Oct 2014 20:17:32 +0000 (20:17 +0000)]
Add a reference to Phabricator.rst to docs/index.rst.

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

10 years agoPR21145: Teach LLVM about C++14 sized deallocation functions.
Richard Smith [Fri, 3 Oct 2014 20:17:06 +0000 (20:17 +0000)]
PR21145: Teach LLVM about C++14 sized deallocation functions.

C++14 adds new builtin signatures for 'operator delete'. This change allows
new/delete pairs to be removed in C++14 onwards, as they were in C++11 and
before.

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

10 years agoRevert "Revert "DI: Fold constant arguments into a single MDString""
Duncan P. N. Exon Smith [Fri, 3 Oct 2014 20:01:09 +0000 (20:01 +0000)]
Revert "Revert "DI: Fold constant arguments into a single MDString""

This reverts commit r218918, effectively reapplying r218914 after fixing
an Ocaml bindings test and an Asan crash.  The root cause of the latter
was a tightened-up check in `DILexicalBlock::Verify()`, so I'll file a
PR to investigate who requires the loose check (and why).

Original commit message follows.

--

This patch addresses the first stage of PR17891 by folding constant
arguments together into a single MDString.  Integers are stringified and
a `\0` character is used as a separator.

Part of PR17891.

Note: I've attached my testcases upgrade scripts to the PR.  If I've
just broken your out-of-tree testcases, they might help.

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

10 years ago[ISel] Keep matching state consistent when folding during X86 address match
Adam Nemet [Fri, 3 Oct 2014 20:00:34 +0000 (20:00 +0000)]
[ISel] Keep matching state consistent when folding during X86 address match

In the X86 backend, matching an address is initiated by the 'addr' complex
pattern and its friends.  During this process we may reassociate and-of-shift
into shift-of-and (FoldMaskedShiftToScaledMask) to allow folding of the
shift into the scale of the address.

However as demonstrated by the testcase, this can trigger CSE of not only the
shift and the AND which the code is prepared for but also the underlying load
node.  In the testcase this node is sitting in the RecordedNode and MatchScope
data structures of the matcher and becomes a deleted node upon CSE.  Returning
from the complex pattern function, we try to access it again hitting an assert
because the node is no longer a load even though this was checked before.

Now obviously changing the DAG this late is bending the rules but I think it
makes sense somewhat.  Outside of addresses we prefer and-of-shift because it
may lead to smaller immediates (FoldMaskAndShiftToScale is an even better
example because it create a non-canonical node).  We currently don't recognize
addresses during DAGCombiner where arguably this canonicalization should be
performed.  On the other hand, having this in the matcher allows us to cover
all the cases where an address can be used in an instruction.

I've also talked a little bit to Dan Gohman on llvm-dev who added the RAUW for
the new shift node in FoldMaskedShiftToScaledMask.  This RAUW is responsible
for initiating the recursive CSE on users
(http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-September/076903.html) but it
is not strictly necessary since the shift is hooked into the visited user.  Of
course it's safer to keep the DAG consistent at all times (e.g. for accurate
number of uses, etc.).

So rather than changing the fundamentals, I've decided to continue along the
previous patches and detect the CSE.  This patch installs a very targeted
DAGUpdateListener for the duration of a complex-pattern match and updates the
matching state accordingly.  (Previous patches used HandleSDNode to detect the
CSE but that's not practical here).  The listener is only installed on X86.

I tested that there is no measurable overhead due to this while running
through the spec2k BC files with llc.  The only thing we pay for is the
creation of the listener.  The callback never ever triggers in spec2k since
this is a corner case.

Fixes rdar://problem/18206171

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

10 years agoR600: Align functions to 256 bytes
Tom Stellard [Fri, 3 Oct 2014 19:02:02 +0000 (19:02 +0000)]
R600: Align functions to 256 bytes

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

10 years agoEliminate some deep std::vector copies. NFC.
Benjamin Kramer [Fri, 3 Oct 2014 18:33:16 +0000 (18:33 +0000)]
Eliminate some deep std::vector copies. NFC.

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

10 years agoMCParser: Modernize memory handling.
Benjamin Kramer [Fri, 3 Oct 2014 18:32:55 +0000 (18:32 +0000)]
MCParser: Modernize memory handling.

NFC.

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

10 years ago[Power] Delete redundant test Atomics-32.ll
Robin Morisset [Fri, 3 Oct 2014 18:10:07 +0000 (18:10 +0000)]
[Power] Delete redundant test Atomics-32.ll

The test Atomics-32.ll was both redundant (all operations are also checked by
atomics.ll at least) and not actually checking correctness (it was not using
FileCheck, just verifying that the compiler does not crash).

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

10 years agollvm-readobj: print out the fields of the COFF delay-import table
Rui Ueyama [Fri, 3 Oct 2014 18:07:18 +0000 (18:07 +0000)]
llvm-readobj: print out the fields of the COFF delay-import table

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

10 years ago[Power] Use lwsync for non-seq_cst fences
Robin Morisset [Fri, 3 Oct 2014 18:04:36 +0000 (18:04 +0000)]
[Power] Use lwsync for non-seq_cst fences

Summary:
hwsync is only required for seq_cst fences, acquire and release one can use
the cheaper lwsync.

Test Plan: Added some cases to atomics.ll + make check-all

Reviewers: jfb, wschmidt

Subscribers: llvm-commits

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

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

10 years agoMipsAsmParser.cpp: fix VS2012 build
Hans Wennborg [Fri, 3 Oct 2014 17:16:24 +0000 (17:16 +0000)]
MipsAsmParser.cpp: fix VS2012 build

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

10 years agoHexagonMCCodeEmitter.h: deleted member functions are not supported in VS2012
Hans Wennborg [Fri, 3 Oct 2014 17:02:28 +0000 (17:02 +0000)]
HexagonMCCodeEmitter.h: deleted member functions are not supported in VS2012

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

10 years ago[mips] Print warning when using register names not available in N32/64
Daniel Sanders [Fri, 3 Oct 2014 15:37:37 +0000 (15:37 +0000)]
[mips] Print warning when using register names not available in N32/64

Summary:
The register names t4-t7 are not available in the N32 and N64 ABIs.
This patch prints a warning, when those names are used in N32/64,
along with a fix-it with the correct register names.

Patch by Vasileios Kalintiris

Reviewers: dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

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

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

10 years agoFix build break on Hexagon
Sid Manning [Fri, 3 Oct 2014 13:59:01 +0000 (13:59 +0000)]
Fix build break on Hexagon

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

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

10 years agoAdding skeleton for unit testing Hexagon Code Emission
Sid Manning [Fri, 3 Oct 2014 13:18:11 +0000 (13:18 +0000)]
Adding skeleton for unit testing Hexagon Code Emission

Adding and modifying CMakeLists.txt files to run unit tests under
unittests/Target/* if the directory exists.  Adding basic unit test to check
that code emitter object can be retrieved.

Differential Revision: http://reviews.llvm.org/D5523
Change by: Colin LeMahieu

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

10 years ago[x86] Teach the new vector shuffle lowering to aggressively form MOVSS
Chandler Carruth [Fri, 3 Oct 2014 13:11:13 +0000 (13:11 +0000)]
[x86] Teach the new vector shuffle lowering to aggressively form MOVSS
and MOVSD nodes for single element vector inserts.

This is particularly important because a number of patterns in the
backend detect these patterns and leverage them to simplify things. It
also fixes quite a few of the insertion bad code examples. However, it
regresses a specific area: when available, blendps and blendpd are
*dramatically* faster than movss and movsd respectively. But it doesn't
really work to form the blend logic first because the blends *aren't* as
crazy efficient when the data is coming from memory anyways, and thus
will have a movss or movsd regardless. Also, doing that would block
a bunch of the patterns that this is designed to hit.

So my plan is to go into the patterns for lowering MOVSS and MOVSD and
lower them via blends when available. However that's a pretty invasive
restructuring so it will need to be a follow-up patch.

I have already gone into the patterns to lower MOVSS and MOVSD from
memory using MOVLPD, etc. Without that, several of the test cases
I already have regress.

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

10 years ago[sphinx cleanup] Fix unexpected indentation warning introduced by r218937
Dan Liew [Fri, 3 Oct 2014 12:28:48 +0000 (12:28 +0000)]
[sphinx cleanup] Fix unexpected indentation warning introduced by r218937

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