38101 Commits

Author SHA1 Message Date
Chris Dewhurst
06dac21852 [Sparc] Add Soft Float support
This change adds support for software floating point operations for Sparc targets.

This is the first in a set of patches to enable software floating point on Sparc. The next patch will enable the option to be used with Clang.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269892 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 09:14:13 +00:00
Craig Topper
4e48490d80 [AVX512] Strengthen type constraints on my rounding mode inputs and some immediate inputs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269886 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 06:56:01 +00:00
Craig Topper
87b374bca7 [AVX512] Strengthen type checks on the X86ISD::SELECT node. Saves over 800 bytes in the DAG isel table by removing type checks for the condition operand which is always a vector or scalar of i1 matching the the number of elements in the other operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269885 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 06:55:59 +00:00
Zlatko Buljan
4b34e977df [mips][microMIPS] Implement LH, LHE, LHU and LHUE instructions and add CodeGen support
Differential Revision: http://reviews.llvm.org/D15418


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269883 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-18 06:54:59 +00:00
Dan Gohman
51510adcfa [WebAssembly] Rename $discard to $drop in the assembly output.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269862 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 23:19:03 +00:00
Dan Gohman
b9fa981c8a [WebAssembly] Model the stack evaluation order more precisely.
We currently don't represent get_local and set_local explicitly; they
are just implied by virtual register use and def. This avoids a lot of
clutter, but it does complicate stackifying: get_locals read their
operands at their position in the stack evaluation order, rather than
at their parent instruction. This patch adds code to walk the stack to
determine the precise ordering, when needed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269854 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 22:24:18 +00:00
Dan Gohman
e5abbb2bf0 [WebAssembly] Don't stackify calls past stack pointer modifications.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269843 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 21:14:26 +00:00
Hans Wennborg
fc99ce0062 Revert r269828 "X86: Avoid using _chkstk when lowering WIN_ALLOCA instructions"
Seems to have broken the Windows ASan bot. Reverting while investigating.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269833 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 20:38:56 +00:00
Dan Gohman
f9336ec145 [WebAssembly] Stackify induction variable increment instructions.
This handles instructions where the defined register is also used, as in
"x = x + 1".


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269830 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 20:19:47 +00:00
Hans Wennborg
547f114e33 X86: Avoid using _chkstk when lowering WIN_ALLOCA instructions
This patch moves the expansion of WIN_ALLOCA pseudo-instructions
into a separate pass that walks the CFG and lowers the instructions
based on a conservative estimate of the offset between the stack
pointer and the lowest accessed stack address.

The goal is to reduce binary size and run-time costs by removing
calls to _chkstk. While it doesn't fix all the code quality problems
with inalloca calls, it's an incremental improvement for PR27076.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269828 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 20:13:29 +00:00
Rafael Espindola
6a70b9b746 Simplify handling of hidden stub.
Since r207518 they are printed exactly like non-hidden stubs on x86 and
since r207517 on ARM.

This means we can use a single set for all stubs in those platforms.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269776 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 16:01:32 +00:00
Renato Golin
41326d5ab1 [ARM] ARM mov InstAlias for MOVW lacks HasV6T2
The movw instruction is only available in ARM state for V6T2 and above.
The MOVi16 instruction has requirement HasV6T2 but the InstAlias
for mov rd, imm where the operand is imm0_65535_expr:$imm does not.

This means that movw can incorrectly be used in ARMv4 and ARMv5 by
writing mov rd, 0x1234. The simple fix is to the requirement HasV6T2
to the InstAlias. Tests added to not-armv4.s.

Patch by Peter Smith.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269761 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 13:05:28 +00:00
David L Kreitzer
b672687bed Fix for PR27750. Correctly handle the case where the fallthrough block and
target block are the same in getFallThroughMBB.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269760 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 12:47:46 +00:00
Derek Schuff
b63ec0f596 [WebAssembly] Remove our copy of PrologEpilogInserter
It's no longer needed after r269750

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269756 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 11:18:35 +00:00
Zoran Jovanovic
9027d962e1 [mips][microMIPS] Implement BEQZC and BNEZC instructions
Differential Revision: http://reviews.llvm.org/D15417


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269755 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 11:10:15 +00:00
Simon Dardis
e7441472ae [mips] Compact branch policy control for MIPSR6
This patch adds the commandline option -mips-compact-branches={never,optimal,always),
which controls how LLVM generates compact branches for MIPS targets. By
default, the compact branch policy is 'optimal' where LLVM will (hopefully)
pick the optimal branch for any situation. The 'never' policy will disable
the generation of compact branches and 'always' will generate compact branches
wherever possible.

Reviewers: dsanders

Differential Review: http://reviews.llvm.org/D20167


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269753 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 10:21:43 +00:00
Zlatko Buljan
6bb068f15c [mips][microMIPS][DSP] Implement BALIGN, BITREV, BPOSGE32, CMP*, CMPGDU*, CMPGU* and CMPU* instructions
Differential Revision: http://reviews.llvm.org/D16182


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269752 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 09:32:58 +00:00
Derek Schuff
4bfd3e29b1 Factor PrologEpilogInserter around spilling, frame finalization, and scavenging
PrologEpilogInserter has these 3 phases, which are related, but not
all of them are needed by all targets. This patch reorganizes PEI's
varous functions around those phases for more clear separation. It also
introduces a new TargetMachine hook, usesPhysRegsForPEI, which is true
for non-virtual targets. When it is true, all the phases operate as
before, and PEI requires the AllVRegsAllocated property on
MachineFunctions. Otherwise, CSR spilling and scavenging are skipped and
only prolog/epilog insertion/frame finalization is done.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269750 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 08:49:59 +00:00
Dan Gohman
c1fd522352 [WebAssembly] Improve the precision of memory and side effect dependence tracking.
MachineInstr::isSafeToMove is more conservative than is needed here;
use a more explicit check, and incorporate knowledge of some
WebAssembly-specific opcodes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269736 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-17 04:05:31 +00:00
Jan Vesely
350e40ffb2 AMDGPU/R600: Use correct number of vector elements when lowering private loads
Reviewer: tstellardAMD, arsenm

Subscribers: arsenm, kzhuravl, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269725 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 23:56:32 +00:00
Matt Arsenault
7985e4be56 AMDGPU: Fix promote alloca pass creating huge arrays
This was assuming it could use all memory before, which is
a bad decision because it restricts occupancy.

By default, only try to use enough space that could reduce
occupancy to 7, an arbitrarily chosen limit.

Based on the exist LDS usage, try to round up to the limit
in the current tier instead of further hurting occupancy.
This isn't ideal, because it doesn't accurately know how much
space is going to be used for alignment padding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269708 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 21:19:59 +00:00
Geoff Berry
7f7d4688d4 [AArch64] Fix bug in large stack spill slot handling (PR27717)
Summary:
Fix bug in MachO path where a frame index offset would not be reserved
for handling large frames when an extra non-used callee-save register
was saved.  In the case where the extra register is reserved or not a
GPR (e.g. %FP in the MachO case), this would lead to the register
scavenger later failing when called from PrologEpilogInserter.

Reviewers: t.p.northover

Subscribers: aemerson, rengolin, mcrosier, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269697 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 20:52:28 +00:00
Bryan Chan
82733bd860 [SystemZ] Support LRVH and STRVH opcodes
Summary: On Linux, /usr/include/bits/byteswap-16.h defines __byteswap_16(x) as an inlined LRVH (Load Reversed Half-word) instruction. The SystemZ back-end did not support this opcode and the inlined assembly would cause a fatal error.

Reviewers: bryanpkc, uweigand

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269688 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 20:32:22 +00:00
Dan Gohman
594d70d5cc [WebAssembly] Mark COPY_LOCAL and TEE_LOCAL instructions has having no side effects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269683 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 19:16:32 +00:00
Dan Gohman
b57691df7a [WebAssembly] Use eqz to negate a branch conditions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269681 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 18:59:34 +00:00
Dan Gohman
b5e78617f3 [WebAssembly] Add a few optimization ideas to README.txt.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269677 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 18:51:03 +00:00
Michael Kuperstein
ee1280d412 [X86] Remove transformVSELECTtoBlendVECTOR_SHUFFLE
The new X86 shuffle lowering can do just fine without transforming vselects
into vector_shuffles. It looks like the only thing this code does right now
is cause trouble - in particular, it can lead to combine/legalization infinite
loops.

Note that it's not completely NFC, since some of the shuffle masks get inverted,
which may cause slight differences further down the line. We may want to find
a way to invert those masks, but that's orthogonal to this commit.

This fixes the hang in PR27689.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269676 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 18:27:00 +00:00
Krzysztof Parzyszek
f6ed63a0fc [Hexagon] Make getCallerSavedRegs specific to a register class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269674 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 18:02:28 +00:00
Krzysztof Parzyszek
ec3abaa727 [Hexagon] Simplify HexagonInstrInfo::isPredicable
Remove all the checks for constant extenders from isPredicable. The users
of it should be the ones checking cost/profitability.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269664 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 16:56:10 +00:00
Chad Rosier
a31dc8ea0e Use proper capitalization and punctuation per coding standards. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269652 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 12:55:01 +00:00
Simon Pilgrim
b2f8226df3 Fixed unused variable warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269650 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 11:48:54 +00:00
Simon Pilgrim
cd0de76e80 [X86][SSSE3] Lower vector CTLZ with PSHUFB lookups
This patch uses PSHUFB to lower vector CTLZ and avoid (slower) scalarizations.

The leading zero count of each 4-bit nibble of the vector is determined by using a PSHUFB lookup. Pairs of results are then repeatedly combined up to the original element width.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269646 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 11:19:11 +00:00
Chris Dewhurst
1c11e8256b [Sparc][LEON] Add LEON-specific CASA instruction.
Differental Revision: http://reviews.llvm.org/D20098

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269644 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 11:02:00 +00:00
Daniel Sanders
c0807f9864 [mips][ias] Fix R_MICROMIPS_GOT16 evaluation and eliminate symbol for R_MICROMIPS_(GOT|HI|LO)16
Summary:
The failure r269410 worked around turned out to be caused by an incorrect
evaluation of R_MICROMIPS_GOT16 which then caused the GOT entries to be
incorrect.

This patch fixes the evaluation and reverts r269410.

Reviewers: sdardis, vkalintiris, rafael

Subscribers: rafael, dsanders, sdardis, llvm-commits

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269641 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 09:33:59 +00:00
Daniel Sanders
8c7f4d958b [mips][ias] EF_MIPS_MICROMIPS should iff microMIPS code was emitted.
Summary:
This fixes PR27682. Additionally, '.set micromips' by itself is not sufficient
to raise the EF_MIPS_MICROMIPS flag. It is also necessary to emit a microMIPS
instruction. This has also been fixed.

Reviewers: sdardis, vkalintiris, rafael

Subscribers: rafael, dsanders, sdardis, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269639 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 09:10:13 +00:00
Zoran Jovanovic
2365c029a9 [mips] Addition of a third operand to the instructions [d]div, [d]divu
Author: obucina
Reviewers: dsanders
Adds support for third operand for [D]DIV[U] instructions. Additional test for case when destination reg is zero register
Differential Revision: http://reviews.llvm.org/D16888


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269636 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-16 08:57:59 +00:00
Simon Pilgrim
ed44c7d8a8 [X86][SSE] Simplify zero'th index extract element matching
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269615 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-15 20:22:50 +00:00
Simon Pilgrim
1d3f9dbe43 [X86][SSE] Removed duplicate variables. NFCI.
Removed duplicate getOperand / getSimpleValueType calls.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269614 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-15 20:11:10 +00:00
Benjamin Kramer
95ce0c789b Move helper classes into anonymous namespaces. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269591 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-15 15:18:11 +00:00
Craig Topper
b776ae7788 [AVX512] Make the permd intrinsics take a 32-bit immediate to match the software spec.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269579 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 21:13:20 +00:00
Saleem Abdulrasool
5ec105e613 ARM: support export directives for Windows
It seems that cl will emit the export directives for Windows ARM targets.  The
fact that it did this had originally been missed and this functionality was
never implemented.  This makes it possible to rely solely on the source code for
indicating what the exported interfaces are and brings us more compatibility
with cl.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269574 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 18:58:34 +00:00
Chad Rosier
dfe70bb564 [AArch64] Update local variable names to conform to coding standard. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269573 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 18:56:28 +00:00
Elena Demikhovsky
fbe3ed3cb9 Fixed lowering of _comi_ intrinsics from all sets - SSE/SSE2/AVX/AVX-512
Differential revision http://reviews.llvm.org/D19261



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269569 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 15:06:09 +00:00
Daniel Sanders
26a1923567 [mips] Enable IAS by default for 32-bit MIPS targets (O32).
Summary:
The MIPS IAS can now pass 'ninja check-all', recurse, build a bootable linux
kernel, and pass a variety of LNT testing.

Unfortunately we can't enable it by default for 64-bit targets yet since the N32
ABI is still very buggy and this also means we can't enable it for N64 either
because we can't distinguish between N32 and N64 in the relevant code.

Reviewers: vkalintiris

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D18759
Differential Revision: http://reviews.llvm.org/D18761



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269560 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 12:43:08 +00:00
Dan Gohman
c40a684451 [WebAssembly] Fix legalization of i128 shifts.
compiler-rt/libgcc shift routines expect the shift count to be an i32, so
use i32 as the shift count for shifts that are legalized to libcalls. This
also reverts r268991, now that the signatures are correct.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269531 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 02:15:47 +00:00
Craig Topper
59cfb9caf5 [AVX512] Fix types for pshufd intrinsics. The immediate is the second argument and the mask is the 4th argument. Also move the 128/256 tests to the right test file.
Prior to this the immediate was a strange 16-bits and the 512-bit intrinsic couldn't receive the full 16 mask bits it needs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269526 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 00:47:18 +00:00
Derek Schuff
505ba6dd9a [WebAssembly] Update expected torture test failures
NFC; the waterfall just changed the way they are built.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269523 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-14 00:22:17 +00:00
Justin Bogner
f4d0fdd74a SDAG: Implement Select instead of SelectImpl in MipsDAGToDAGISel
- Where we were returning a node before, call ReplaceNode instead.
- Where we would return null to fall back to another selector, rename
  the method to try* and return a bool for success.
- Where we were calling SelectNodeTo, just return afterwards.

Part of llvm.org/pr26808.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269519 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-13 23:55:59 +00:00
Justin Bogner
65d837e226 SDAG: Clean up a dead node I missed earlier in X86
H.J. Lu pointed out that I missed this in r269236. Thanks!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269516 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-13 23:26:28 +00:00
Chad Rosier
d2cf73de3e [AArch64] Simplify logic to reduce vertical space. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269512 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-13 22:53:13 +00:00