145820 Commits

Author SHA1 Message Date
Sjoerd Meijer
c0dc1a30a6 AArch64InstPrinter: rewrite of printSysAlias
This is a cleanup/rewrite of the printSysAlias function. This was not using the
tablegen instruction descriptions, but was "manually" decoding the
instructions. This has been replaced with calls to lookup_XYZ_ByEncoding
tablegen calls.

This revealed several problems. First, instruction IVAU had the wrong encoding.
This was cancelled out by the parser that incorrectly matched the wrong
encoding. Second, instruction CVAP was missing from the SystemOperands tablegen
descriptions, so this has been added. And third, the required target features
were not captured in the tablegen descriptions, so support for this has also
been added.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296343 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 14:45:34 +00:00
John Brawn
4042b8120e [ARM] LSL #0 is an alias of MOV
Currently we handle this correctly in arm, but in thumb we don't which leads to
an unpredictable instruction being emitted for LSL #0 in an IT block and SP not
being permitted in some cases when it should be.

For the thumb2 LSL we can handle this by making LSL #0 an alias of MOV in the
.td file, but for thumb1 we need to handle it in checkTargetMatchPredicate to
get the IT handling right. We also need to adjust the handling of
MOV rd, rn, LSL #0 to avoid generating the 16-bit encoding in an IT block. We
should also adjust it to allow SP in the same way that it is allowed in
MOV rd, rn, but I haven't done that here because it looks like it would take
quite a lot of work to get right.

Additionally correct the selection of the 16-bit shift instructions in
processInstruction, where it was checking if the two registers were equal when
it should have been checking if they were low. It appears that previously this
code was never executed and the 16-bit encoding was selected by default, but
the other changes I've done here have somehow made it start being used.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296342 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 14:40:51 +00:00
Artur Pilipenko
85f508cd9d [DAGCombine] Fix for a load combine bug with non-zero offset patterns on BE targets
This pattern is essentially a i16 load from p+1 address:

  %p1.i16 = bitcast i8* %p to i16*
  %p2.i8 = getelementptr i8, i8* %p, i64 2
  %v1 = load i16, i16* %p1.i16
  %v2.i8 = load i8, i8* %p2.i8
  %v2 = zext i8 %v2.i8 to i16
  %v1.shl = shl i16 %v1, 8
  %res = or i16 %v1.shl, %v2

Current implementation would identify %v1 load as the first byte load and would mistakenly emit a i16 load from %p1.i16 address. This patch adds a check that the first byte is loaded from a non-zero offset of the first load address. This way this address can be used as the base address for the combined value. Otherwise just give up combining.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296336 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 13:04:23 +00:00
Artur Pilipenko
f85432589b [DAGCombine] NFC. MatchLoadCombine extract MemoryByteOffset lambda helper
This refactoring will simplify the upcoming change to fix the bug in folding patterns with non-zero offsets on BE targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296332 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 11:42:54 +00:00
Artur Pilipenko
0003ac947f [DAGCombine] NFC. MatchLoadCombine remember the first byte provider, not the load node
This refactoring will simplify the upcoming change to fix a bug in folding patterns with non-zero offsets on BE targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296331 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 11:40:14 +00:00
Sjoerd Meijer
b9ae988ece AArch64AsmParser: don't try to parse “[1]” for non-vector register operands
There are no instructions that have "[1]" as part of the assembly string;
FMOVXDhighr is out of date. This removes dead code.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296327 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 10:51:11 +00:00
Konstantin Zhuravlyov
9995ddddac [AMDGPU] Runtime metadata fixes:
- Verify that runtime metadata is actually valid runtime metadata when assembling, otherwise we could accept the following when assembling, but ocl runtime will reject it:
    .amdgpu_runtime_metadata
    { amd.MDVersion: [ 2, 1 ], amd.RandomUnknownKey, amd.IsaInfo: ...
  - Make IsaInfo optional, and always emit it.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296324 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 07:55:17 +00:00
Brian Cain
f54e7aac32 llvm-mc-fuzzer: add support for assembly
This creates an llvm-mc-disassemble-fuzzer from the existing llvm-mc-fuzzer
and finishing the assemble support in llvm-mc-assemble-fuzzer.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296323 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 06:22:17 +00:00
Craig Topper
34270516e1 [APInt] Use UINT64_MAX instead of ~integerPart(0). NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296322 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 06:05:33 +00:00
Craig Topper
08d480dc77 [X86] Check for less than 0 rather than explicit compare with -1. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296321 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 06:05:30 +00:00
Amaury Sechet
df8980ea70 Do full codegen for various tests. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296305 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-27 01:15:57 +00:00
Craig Topper
f9be4a2c06 [APInt] Use UINT64_MAX instead of ~uint64_t(0ULL). NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296301 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 21:15:18 +00:00
Craig Topper
e87a9a6253 [APInt] Use UINT64_MAX instead of ~0ULL. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296300 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 19:28:48 +00:00
Craig Topper
d1973fd95b [APInt] Remove unnecessary early out from getLowBitsSet. The same case is handled equally well by the next check.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296299 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 19:28:45 +00:00
Xin Tong
e76fd06806 Update comments. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296298 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 19:08:44 +00:00
Daniel Jasper
e5e8f2aec1 Revert "[CGP] Split some critical edges coming out of indirect branches"
This reverts commit r296149 as it leads to crashes when compiling for
PPC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296295 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 11:09:12 +00:00
Davide Italiano
1aaf55cfbf [LoopDeletion] Modernize and simplify a bit. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296294 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 07:08:20 +00:00
Craig Topper
ca75ea33bc [X86] Fix execution domain for cmpss/sd instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296293 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:59 +00:00
Craig Topper
bcfde2ad75 [AVX-512] Fix execution domain for scalar commutable min/max instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296292 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:56 +00:00
Craig Topper
d9d761585e [AVX-512] Fix execution domain for vmovhpd/lpd/hps/lps.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296291 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:54 +00:00
Craig Topper
f46e01bb23 [AVX-512] Fix the execution domain for AVX-512 integer broadcasts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296290 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:51 +00:00
Craig Topper
b64325c5da [AVX-512] Disable the redundant patterns in the VPBROADCASTBr_Alt and VPBROADCASTWr_Alt instructions. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296289 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:48 +00:00
Craig Topper
b1620f1be0 [AVX-512] Fix execution domain for VPMADD52 instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296288 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:45 +00:00
Craig Topper
7a7f627e7f [AVX-512] Use update_llc_test_checks.py to regenerate a test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296287 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:43 +00:00
Craig Topper
3703247296 [AVX-512] Fix the execution domain for VSCALEF instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296286 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:40 +00:00
Craig Topper
bb0ec0e4f5 [AVX-512] Fix execution domain of scalar VRANGE/REDUCE/GETMANT with sae.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296285 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:37 +00:00
Craig Topper
914a8e7fd7 [X86] Fix the execution domain for scalar SQRT intrinsic instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296284 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:35 +00:00
Craig Topper
09082bbc64 [X86] Add an additional CHECK prefix to a test. Some of the cases used it, but it wasn't on the FileCheck command lines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296283 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 06:45:32 +00:00
Xin Tong
650a66fb4c [SCCP] Remove manual folding of terminator instructions.
Summary:
BranchInst, SwitchInst (with non-default case) with Undef as input is not
possible at this point. As we always default-fold terminator to one target in
ResolvedUndefsIn and set the input accordingly.

So we should only have constantint/blockaddress here.

If ConstantFoldTerminator fails, that could mean 2 things.

1. ConstantFoldTerminator is doing something unexpected, i.e. not folding on constantint
or blockaddress and not making blocks that should be dead dead.
2. This is not a terminator on constantint or blockaddress. Its on a constant or
overdefined, then this block should not be dead.

In both cases, we should assert.

Reviewers: davide, efriedma, sanjoy

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296281 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 02:11:24 +00:00
David L. Jones
a11dc45cbd [X86] Clean up test/CodeGen/X86/2006-03-02-InstrSchedBug.ll
Summary:
Migrated from grep to FileCheck.
Re-indented code, removed boilerplate comments.
Added 'entry' label at beginning of basic block.

Patch by Jorge Gorbe!

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296280 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 01:32:35 +00:00
Nirav Dave
b89cc7e5e3 Revert "In visitSTORE, always use FindBetterChain, rather than only when UseAA is enabled."
This reverts commit r296252 until 256-bit operations are more efficiently generated in X86.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296279 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 01:27:32 +00:00
Eric Christopher
0ef3663fb8 vec perm can go down either pipeline on P8.
No observable changes, spotted while looking at the scheduling description.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296277 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-26 00:11:58 +00:00
Sanjoy Das
3a603f4129 Fix signed-unsigned comparison warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296274 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 22:25:48 +00:00
Sanjoy Das
9b2526d03d [ValueTracking] Don't do an unchecked shift in ComputeNumSignBits
Summary:
Previously we used to return a bogus result, 0, for IR like `ashr %val,
-1`.

I've also added an assert checking that `ComputeNumSignBits` at least
returns 1.  That assert found an already checked in test case where we
were returning a bad result for `ashr %val, -1`.

Fixes PR32045.

Reviewers: spatel, majnemer

Reviewed By: spatel, majnemer

Subscribers: efriedma, mcrosier, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296273 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 20:30:45 +00:00
Simon Pilgrim
95d021ba68 [APInt] Add APInt::extractBits() method to extract APInt subrange (reapplied)
The current pattern for extract bits in range is typically:

Mask.lshr(BitOffset).trunc(SubSizeInBits);

Which can be particularly slow for large APInts (MaskSizeInBits > 64) as they require the allocation of memory for the temporary variable.

This is another of the compile time issues identified in PR32037 (see also D30265).

This patch adds the APInt::extractBits() helper method which avoids the temporary memory allocation.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296272 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 20:01:58 +00:00
Craig Topper
955b35337f [AVX-512] Fix the execution domain for scalar FMA instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296271 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 19:36:28 +00:00
Craig Topper
5d138fe5d3 [AVX-512] Fix the execution domain on some instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296270 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 19:18:11 +00:00
Craig Topper
8c3aa943c7 [AVX-512] Add an additional test case to show the execution domain for vrqsrtsd is wrong.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296269 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 19:18:08 +00:00
Craig Topper
7c60e0d62f [AVX-512] Use update_llc_test_checks.py to regenerate the avx512er intrinsic test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296268 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 19:18:04 +00:00
Nirav Dave
5dd1e7d646 reenable accidentally disabled test NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296266 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 19:11:53 +00:00
Craig Topper
d63ab8f4ea [AVX-512] Remove unnecessary masked versions of VCVTSS2SD and VCVTSD2SS using the scalar register class. We only have patterns for the masked intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296264 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 18:43:42 +00:00
Craig Topper
6a0edd3bec [ExecutionDepsFix] Don't make copies of LiveReg objects when collecting operands for soft instructions
Summary:
While collecting operands we make copies of the LiveReg objects which are stored in the LiveRegs array. If the instruction uses the same register multiple times we end up with multiple copies. Later we iterate through the collected list of LiveReg objects and merge DomainValues. In the process of doing this the merge function can change the contents of the original LiveReg object in the LiveRegs array, but not the copies that have been made. So when we get to the second usage of the register we end up seeing a stale copy of the LiveReg object.

To fix this I've stopped copying and now just store a pointer to the original LiveReg object. Another option might be to avoid adding the same register to the Regs array twice, but this approach seemed simpler.

The included test case exposes this bug due to an AVX-512 masked OR instruction using the same register for the passthru operand and one of the inputs to the OR operation.

Fixes PR30284.

Reviewers: RKSimon, stoklund, MatzeB, spatel, myatsina

Reviewed By: RKSimon

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296260 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 18:12:25 +00:00
Artyom Skrobov
cc3dbb4073 No need to copy the variable [NFC]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296259 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 17:18:09 +00:00
NAKAMURA Takumi
96678fa6d8 Revert r296215, "[PDB] General improvements to Stream library." and followings.
r296215, "[PDB] General improvements to Stream library."
r296217, "Disable BinaryStreamTest.StreamReaderObject temporarily."
r296220, "Re-enable BinaryStreamTest.StreamReaderObject."
r296244, "[PDB] Disable some tests that are breaking bots."
r296249, "Add static_cast to silence -Wc++11-narrowing."

std::errc::no_buffer_space should be used for OS-oriented errors for socket transmission.
(Seek discussions around llvm/xray.)

I could substitute s/no_buffer_space/others/g, but I revert whole them ATM.

Could we define and use LLVM errors there?

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296258 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 17:04:23 +00:00
Amaury Sechet
2a05efcebd Update various test's codegen. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296257 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 16:46:47 +00:00
Amaury Sechet
2d8b3feb15 Add test for known bits in uaddo and saddo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296255 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 15:58:34 +00:00
Artyom Skrobov
8184c211ea The automatic CHECK: to CHECK-LABEL: conversion, back in 2013,
had missed most labels in this test because they didn't end
with a colon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296254 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 15:17:16 +00:00
Victor Leschuk
532cb32214 [DebugInfo] Skip implicit_const attributes when dumping .debug_info. NFC.
When dumping .debug_info section we loop through all attributes mentioned in
.debug_abbrev section and dump values using DWARFFormValue::extractValue().
We need to skip implicit_const attributes here as their values are not
really located in .debug_info but directly in .debug_abbrev. This patch fixes
triggered assert() in DWARFFormValue::extractValue() caused by trying to
access implicit_const values from .debug_info.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296253 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 13:15:57 +00:00
Nirav Dave
32147cef64 In visitSTORE, always use FindBetterChain, rather than only when UseAA is enabled.
Recommiting after fixup of 32-bit aliasing sign offset bug in DAGCombiner.

    * Simplify Consecutive Merge Store Candidate Search

    Now that address aliasing is much less conservative, push through
    simplified store merging search and chain alias analysis which only
    checks for parallel stores through the chain subgraph. This is cleaner
    as the separation of non-interfering loads/stores from the
    store-merging logic.

    When merging stores search up the chain through a single load, and
    finds all possible stores by looking down from through a load and a
    TokenFactor to all stores visited.

    This improves the quality of the output SelectionDAG and the output
    Codegen (save perhaps for some ARM cases where we correctly constructs
    wider loads, but then promotes them to float operations which appear
    but requires more expensive constant generation).

    Some minor peephole optimizations to deal with improved SubDAG shapes (listed below)

    Additional Minor Changes:

      1. Finishes removing unused AliasLoad code

      2. Unifies the chain aggregation in the merged stores across code
         paths

      3. Re-add the Store node to the worklist after calling
         SimplifyDemandedBits.

      4. Increase GatherAllAliasesMaxDepth from 6 to 18. That number is
         arbitrary, but seems sufficient to not cause regressions in
         tests.

      5. Remove Chain dependencies of Memory operations on CopyfromReg
         nodes as these are captured by data dependence

      6. Forward loads-store values through tokenfactors containing
          {CopyToReg,CopyFromReg} Values.

      7. Peephole to convert buildvector of extract_vector_elt to
         extract_subvector if possible (see
         CodeGen/AArch64/store-merge.ll)

      8. Store merging for the ARM target is restricted to 32-bit as
         some in some contexts invalid 64-bit operations are being
         generated. This can be removed once appropriate checks are
         added.

    This finishes the change Matt Arsenault started in r246307 and
    jyknight's original patch.

    Many tests required some changes as memory operations are now
    reorderable, improving load-store forwarding. One test in
    particular is worth noting:

      CodeGen/PowerPC/ppc64-align-long-double.ll - Improved load-store
      forwarding converts a load-store pair into a parallel store and
      a memory-realized bitcast of the same value. However, because we
      lose the sharing of the explicit and implicit store values we
      must create another local store. A similar transformation
      happens before SelectionDAG as well.

    Reviewers: arsenm, hfinkel, tstellarAMD, jyknight, nhaehnle

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296252 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 11:43:58 +00:00
Piotr Padlewski
79b977862e [Doc] Modernize programmers manual
Summary:
Fixed bunch of for loops to range based for loop
and bunch of rendundat types with auto.

Reviewers: echristo, silvas, chandlerc

Subscribers: mehdi_amini, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296251 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-25 10:33:37 +00:00