Commit Graph

141843 Commits

Author SHA1 Message Date
Tim Northover
2c23a5b605 GlobalISel: correctly handle small args via memory.
We were rounding size in bits down rather than up, leading to 0-sized slots for
i1 (assert!) and bugs for other types not byte-aligned.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288848 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 21:02:19 +00:00
Zvi Rackover
42694a3a7e [X86] Prefer reduced width multiplication over pmulld on Silvermont
Summary:
Prefer expansions such as: pmullw,pmulhw,unpacklwd,unpackhwd over pmulld.
On Silvermont [source: Optimization Reference Manual]:
PMULLD has a throughput of 1/11 [instruction/cycles].
PMULHUW/PMULHW/PMULLW have a throughput of 1/2 [instruction/cycles].

Fixes pr31202.

Analysis of this issue was done by Fahana Aleen.

Reviewers: wmi, delena, mkuper

Subscribers: RKSimon, llvm-commits

Differential Revision: https://reviews.llvm.org/D27203

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288844 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 19:35:20 +00:00
Simon Pilgrim
6e9255f2d0 [DAGCombine] Add (sext_in_reg (zext x)) -> (sext x) combine
Handle the case where a sign extension has ended up being split into separate stages (typically to get around vector legal ops) and a zext + sext_in_reg gets inserted.

Differential Revision: https://reviews.llvm.org/D27461

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288842 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 19:09:37 +00:00
Sanjay Patel
02d83470ab [InstSimplify] add folds for and-of-icmps with same operands
All of these (and a few more) are already handled by InstCombine,
but we shouldn't have to wait until then to simplify these because
they're cheap to deal with here in InstSimplify.

This is the 'and' sibling of the earlier 'or' patch:
https://reviews.llvm.org/rL288833


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288841 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 19:05:46 +00:00
Tim Northover
9c3d059fa2 GlobalISel: fall back gracefully when we hit unhandled legalizer default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288840 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 19:02:15 +00:00
Simon Pilgrim
3074f79595 [SelectionDAG] We can ignore knownbits from an undef shuffle vector index if we don't actually demand that element
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288839 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:58:25 +00:00
Sanjay Patel
feccc03d8c [InstSimplify] add tests for and-of-icmps; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288837 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:46:54 +00:00
Tim Northover
3a783f8716 GlobalISel: handle G_SEQUENCE fallbacks gracefully.
There were two problems:
  + AArch64 was reusing random data from its binary op tables, which is
    complete nonsense for G_SEQUENCE.
  + Even when AArch64 gave up and said it couldn't handle G_SEQUENCE,
    the generic code asserted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288836 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:38:38 +00:00
Tim Northover
22c48aa20e GlobalISel: allow G_SELECT instructions for pointers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288835 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:38:34 +00:00
Tim Northover
a5cd8a603e GlobalISel: stop the legalizer from trying to handle oddly-sized types.
It'll almost immediately fail because it always tries to half/double the size
until it finds a legal one. Unfortunately, this triggers an assertion
preventing the DAG fallback from being possible.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288834 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:38:29 +00:00
Sanjay Patel
b4824c6afa [InstSimplify] add folds for or-of-icmps with same operands
All of these (and a few more) are already handled by InstCombine,
but we shouldn't have to wait until then to simplify these because
they're cheap to deal with here in InstSimplify.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288833 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 18:09:37 +00:00
George Rimar
1f9118e823 [llvm-readobj] - Teach readobj to print PT_OPENBSD_BOOTDATA header
These are OpenBSD specific program headers.

OpenBSD commit:
d39116912b

It is required for fixing PR31288.

Differential revision: https://reviews.llvm.org/D27456

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288831 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 17:55:52 +00:00
Sanjay Patel
b1960d468e [InstSimplify] add tests for or-of-icmps; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288830 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 17:49:10 +00:00
Chris Bieneman
461b461526 [CMake] Fixing clang standalone build
I broke this in r288770.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288829 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 17:09:29 +00:00
Simon Pilgrim
057100dd3a [X86][SSE] Add knownbits test demonstrating demandedelts not ignoring undef shuffle elements
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288825 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 17:00:47 +00:00
Simon Pilgrim
06ec4e5b99 [X86][SSE] Added vector sext_in_reg combine tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288819 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 15:57:26 +00:00
George Rimar
614f299a3d Removed trailing whitespaces. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288817 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 15:40:02 +00:00
George Rimar
e513e25b57 [Support/ELF] - Add OpenBSD PT_OPENBSD_BOOTDATA constant.
OpenBSD commit for reference:
d39116912b

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288816 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 15:38:15 +00:00
Simon Pilgrim
42fe8f58c5 [X86] Improve UMAX/UMIN knownbits test
Test the sequential effect of each op

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288815 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 15:17:50 +00:00
Simon Pilgrim
44a9007743 Avoid repeated calls to Op.getOpcode(). NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288814 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 14:50:09 +00:00
Daniel Sanders
cef5592d6d [globalisel][aarch64] Fix unintended assumptions about PartialMappingIdx. NFC.
Summary:
This is NFC but prevents assertions when PartialMappingIdx is tablegen-erated.
The assumptions were:
1) FirstGPR is 0
2) FirstGPR is the first of the First* enumerators.

GPR32 is changed to 1 to demonstrate that assumption #1 is fixed. #2 will
be covered by a subsequent patch that tablegen-erates information and swaps
the order of GPR and FPR as a side effect.

Depends on D27336

Reviewers: ab, t.p.northover, qcolombet

Subscribers: aemerson, rengolin, vkalintiris, dberris, rovka, llvm-commits

Differential Revision: https://reviews.llvm.org/D27337

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288812 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 14:39:57 +00:00
Daniel Sanders
462ab869ac [globalisel][aarch64] Replace magic numbers with corresponding enumerators in ValMappings. NFC
Reviewers: ab, t.p.northover, qcolombet

Subscribers: aemerson, rengolin, vkalintiris, dberris, llvm-commits, rovka

Differential Revision: https://reviews.llvm.org/D27336

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288810 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 13:55:01 +00:00
Daniel Sanders
10ef691126 [globalisel][aarch64] Correct argument names in comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288809 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 13:48:58 +00:00
Simon Pilgrim
8c88727b77 [SLPVectorizer][X86] Tests to show missed buildvector sitofp/fptosi vectorizations
e.g.
buildvector(sitofp(i32), sitofp(i32), sitofp(i32), sitofp(i32)) --> sitofp(buildvector(i32, i32, i32, i32))

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288807 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 13:29:55 +00:00
Oliver Stannard
91bc1bbfb2 [ARM] Better error message for invalid flag-preserving Thumb1 insts
When we see a non flag-setting instruction for which only the flag-setting
version is available in Thumb1, we should give a better error message than
"invalid instruction".

Differential Revision: https://reviews.llvm.org/D27414



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288805 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 12:59:08 +00:00
Ayman Musa
c700b40b54 [X86][AVX512] Detect repeated constant patterns in BUILD_VECTOR suitable for broadcasting.
Check if a build_vector node includes a repeated constant pattern and replace it with a broadcast of that pattern.
For example:
"build_vector <0, 1, 2, 3, 0, 1, 2, 3>" would be replaced by "broadcast <0, 1, 2, 3>"

Differential Revision: https://reviews.llvm.org/D26802



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288804 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 12:24:14 +00:00
Simon Pilgrim
01544ba3a3 [X86] Add tests to show missed opportunities to calculate knownbits in SMAX/SMIN/UMAX/UMIN
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288801 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 12:12:20 +00:00
Nemanja Ivanovic
3d641da82e [PowerPC] Improvements for BUILD_VECTOR Vol. 4
This is the final patch in the series of patches that improves
BUILD_VECTOR handling on PowerPC. This adds a few peephole optimizations
to remove redundant instructions. It also adds a large test case which
encompasses a large set of code patterns that build vectors - this test
case was the motivator for this series of patches.

Differential Revision: https://reviews.llvm.org/D26066


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288800 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 11:47:14 +00:00
Daniel Sanders
a0010d9f6b [globalisel][aarch64] Prefix PartialMappingIdx enumerators with 'PMI_' to fit coding standards.
This also stops things like 'None' polluting the llvm::AArch64 namespace.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288799 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 11:33:04 +00:00
Simon Pilgrim
975669a6b6 Fix MSVC -Wmicrosoft-enum-value 'enumerator value is not representable' warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288798 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 11:27:19 +00:00
Simon Pilgrim
7b48d47c58 Fix MSVC bool to uint64_t promotion warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288796 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 11:12:53 +00:00
Chandler Carruth
04d64487f9 [LCG] Add some much needed asserts and verify runs to uncover
a hilarious bug and fix it.

We somehow were never verifying the RefSCCs newly formed when
splitting an existing one apart, and when verifying them we weren't
really checking the SCC indices mapping effectively.

If we had been, it would have been blindingly obvious that right after
putting something int `RC.SCCs` we should update `RC.SCCIndices` instead
of `SCCIndices` which we were about to clear and rebuild anyways. =[

Anyways, this is thoroughly covered by existing tests now that we
actually verify things properly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288795 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 10:29:23 +00:00
Florian Hahn
c153f037fe [framelowering] Improve tracking of first CS pop instruction.
Summary: This patch makes sure FirstCSPop and MBBI never point to DBG_VALUE instructions, which affected the code generated.

Reviewers: mkuper, aprantl, MatzeB

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D27343

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288794 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 10:24:55 +00:00
Sam McCall
ec5ae20d53 Add missing parens in assert.
Summary: Add missing parens in assert, which warn in GCC.

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D27448

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288792 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 10:14:36 +00:00
Chandler Carruth
ff117bc9cb [PM] Basic cleanups to CGSCC update code, NFC.
Just using InstIterator, simpler loop structures, and making better use
of the visit callback infrastructure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288790 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 10:06:06 +00:00
Craig Topper
8368f754a7 [X86] Remove another weird scalar sqrt/rcp/rsqrt pattern.
This pattern turned a vector sqrt/rcp/rsqrt operation of sse_load_f32/f64 into the the scalar instruction for the operation and put undef into the upper bits. For correctness, the resulting code should still perform the sqrt/rcp/rsqrt on the upper bits after the load is extended since that's what the operation asked for. Particularly in the case where the upper bits are 0, in that case we need calculate the sqrt/rcp/rsqrt of the zeroes and keep the result in the upper-bits. This implies we should be using the packed instruction still.

The only test case for this pattern is one I just added so there was no coverage of this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288784 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:08:12 +00:00
Craig Topper
10b8bf3510 [X86] Add test case demonstrating a case where a vector sqrt being passed (scalar_to_vector loadf64) uses a scalar sqrt instruction.
This occurs due to a pattern that uses sse_load_f32/f64 with vector sqrt/rcp/rsqrt operations and turns them into scalar instructions. Perhaps for the case were the upper bits come from undef this is ok.  I believe a (vzmovl load64) would do the same thing but those seems to become vzload instead and selectScalarSSELoad doesn't handle that today. In that case we should be performing the vector operation on the zeros in the upper bits which is not equivalent to using a scalar instruction.

I will remove this pattern in a follow up patch. There appears to be no other test content for it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288783 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:08:09 +00:00
Craig Topper
0659581d34 [X86] Regenerate a test using update_llc_test_checks.py
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288782 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:08:07 +00:00
Craig Topper
c7da972d1d [X86] Remove bad pattern that caused 128-bit loads being used by scalar sqrt/rcp/rsqrt intrinsics to select the memory form of the corresponding instruction and violate the semantics of the intrinsic.
The intrinsics are supposed to pass the upper bits straight through to their output register. This means we need to make sure we still perform the 128-bit load to get those upper bits to pass to give to the instruction since the memory form of the instruction only reads 32 or 64 bits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288781 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:08:04 +00:00
Craig Topper
de4f9d5a4f [X86] Add test case that shows a scalar sqrtsd intrinsic of a 128-bit vector load using the load form of the sqrtsd instruction which violates the intrinsic semantics.
The sqrtsd instruction only loads 64-bits and writes bits 63:0 with the sqrt result. Bits 127:64 are preserved in the destination register. The semantics of the intrinsic indicate bits 127:64 should come from the intrinsic argument which in this case is a 128-bit load. So the generated code should have a 128-bit load and use a register form of sqrtsd.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288780 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:08:01 +00:00
Craig Topper
64ddc83afd [X86] Correct pattern for VSQRTSSr_Int, VSQRTSDr_Int, VRCPSSr_Int, and VRSQRTSSr_Int to not have an IMPLICIT_DEF on the first input. The semantics of the intrinsic are clear and not undefined.
The intrinsic takes one argument, the lower bits are affected by the operation and the upper bits should be passed through. The instruction itself takes two operands, the high bits of the first operand are passed through and the low bits of the second operand are modified by the operation. To match this to the intrinsic we should pass the single intrinsic input to both operands.

I had to remove the stack folding test for these instructions since they depended on the incorrect behavior. The same register is now used for both inputs so the load can't be folded.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288779 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 08:07:58 +00:00
Chris Bieneman
4a6766e76f [ObjectYAML] First bit of support for encoding DWARF in MachO
This patch adds the starting support for encoding data from the MachO __DWARF segment. The first section supported is the __debug_str section because it is the simplest.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288774 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 06:00:49 +00:00
Craig Topper
25dd36e1c9 [X86] Remove scalar logical op alias instructions. Just use COPY_FROM/TO_REGCLASS and the normal packed instructions instead
Summary:
This patch removes the scalar logical operation alias instructions. We can just use reg class copies and use the normal packed instructions instead. This removes the need for putting these instructions in the execution domain fixing tables as was done recently.

I removed the loadf64_128 and loadf32_128 patterns as DAG combine creates a narrower load for (extractelt (loadv4f32)) before we ever get to isel.

I plan to add similar patterns for AVX512DQ in a future commit to allow use of the larger register class when available.

Reviewers: spatel, delena, zvi, RKSimon

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D27401

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288771 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 04:58:39 +00:00
Chris Bieneman
dfe568d766 [CMake] Cleanup TableGen include flags
It is kinda crazy to have llvm/include and llvm/lib/Target in the include path for every tablegen invocation for every tablegen-like tool.

This patch removes those flags from the tablgen function that is called everywhere by instead creating a variable LLVM_TABLEGEN_FLAGS which is setup in the LLVM source directories.

This removes TableGen.cmake's dependency on LLVM_MAIN_SRC_DIR, and LLVM_MAIN_INCLUDE_DIR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288770 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 04:45:11 +00:00
Philip Reames
7c651d6dd2 [LVI] Remove dead code in mergeIn
Integers are expressed in the lattice via constant ranges.  They can never be represented by constants or not-constants; those are reserved for non-integer types.  This code has been dead for literaly years.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288767 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 03:34:33 +00:00
Philip Reames
19937b05c3 [LVI] Extract a helper function
Extracting a helper function out of solveBlockValue makes the contract around the cache much easier to understand.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288766 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 03:22:03 +00:00
Philip Reames
ab3b56e2dc [LVI] Hide the last markX function on LVILatticeVal
This completes a small series of patches to hide the stateful updates of LVILatticeVal from the consuming code.  The only remaining stateful API is mergeIn.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288765 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 03:01:08 +00:00
Philip Reames
36c7a94155 [LVI] Hide a confusing internal interface
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288764 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 02:54:16 +00:00
Mandeep Singh Grang
9196899788 [llvm] Fix D26214: Move error handling out of MC and to the callers.
Summary: Related clang patch; https://reviews.llvm.org/D27360

Reviewers: t.p.northover, grosbach, compnerd, echristo

Subscribers: compnerd, mehdi_amini, llvm-commits

Differential Revision: https://reviews.llvm.org/D27359

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288763 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 02:49:17 +00:00
Philip Reames
d37747e061 [LVI] Remove duplicate code using existing helper function
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288761 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-06 02:36:58 +00:00