]> granicus.if.org Git - llvm/log
llvm
5 years agoAMDGPU: Use PatFrags to allow selecting custom nodes or intrinsics
Matt Arsenault [Mon, 9 Sep 2019 18:10:31 +0000 (18:10 +0000)]
AMDGPU: Use PatFrags to allow selecting custom nodes or intrinsics

This enables GlobalISel to handle various intrinsics. The custom node
pattern will be ignored, and the intrinsic will work. This will also
allow SelectionDAG to directly select the intrinsics, but as they are
all custom lowered to the nodes, this ends up leaving dead code in the
table.

Eventually either GlobalISel should add the equivalent of custom nodes
equivalent, or intrinsics should be directly used. These each have
different tradeoffs.

There are a few more to handle, but these are easy to handle
ones. Some others fail for other reasons.

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

5 years ago[SelectionDAG] Remove ISD::FP_ROUND_INREG
Craig Topper [Mon, 9 Sep 2019 17:54:44 +0000 (17:54 +0000)]
[SelectionDAG] Remove ISD::FP_ROUND_INREG

I don't think anything in tree creates this node. So all of this
code appears to be dead.

Code coverage agrees
http://lab.llvm.org:8080/coverage/coverage-reports/llvm/coverage/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp.html

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

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

5 years ago[X86] Allow _MM_FROUND_CUR_DIRECTION and _MM_FROUND_NO_EXC to be used together on...
Craig Topper [Mon, 9 Sep 2019 17:48:05 +0000 (17:48 +0000)]
[X86] Allow _MM_FROUND_CUR_DIRECTION and _MM_FROUND_NO_EXC to be used together on instructions that only support SAE and not embedded rounding.

Current for SAE instructions we only allow _MM_FROUND_CUR_DIRECTION(bit 2) or _MM_FROUND_NO_EXC(bit 3) to be used as the immediate passed to the inrinsics. But these instructions don't perform rounding so _MM_FROUND_CUR_DIRECTION is just sort of a default placeholder when you don't want to suppress exceptions. Using _MM_FROUND_NO_EXC by itself is really bit equivalent to (_MM_FROUND_NO_EXC | _MM_FROUND_TO_NEAREST_INT) since _MM_FROUND_TO_NEAREST_INT is 0. Since we aren't rounding on these instructions we should also accept (_MM_FROUND_CUR_DIRECTION | _MM_FROUND_NO_EXC) as equivalent to (_MM_FROUND_NO_EXC). icc allows this, but gcc does not.

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

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

5 years ago[Remarks] Add parser for bitstream remarks
Francis Visoiu Mistrih [Mon, 9 Sep 2019 17:43:50 +0000 (17:43 +0000)]
[Remarks] Add parser for bitstream remarks

The bitstream remark serializer landed in r367372.

This adds a bitstream remark parser that parser bitstream remark files
to llvm::remarks::Remark objects through the RemarkParser interface.

A few interesting things to point out:

* There are parsing helpers to parse the different types of blocks
* The main parsing helper allows us to parse remark metadata and open an
external file containing the encoded remarks
* This adds a dependency from the Remarks library to the BitstreamReader
library
* The testing strategy is to create a remark entry through YAML, parse
it, serialize it to bitstream, parse that back and compare the objects.
* There are close to no tests for malformed bitstream remarks, due to
the lack of textual format for the bitstream format.
* This adds a new C API for parsing bitstream remarks:
LLVMRemarkParserCreateBitstream.
* This bumps the REMARKS_API_VERSION to 1.

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

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

5 years ago[mips] Fix decoding of microMIPS JALX instruction
Simon Atanasyan [Mon, 9 Sep 2019 17:28:45 +0000 (17:28 +0000)]
[mips] Fix decoding of microMIPS JALX instruction

microMIPS jump and link exchange instruction stores a target in a
26-bits field. Despite other microMIPS JAL instructions these bits
are target address shifted right 2 bits [1]. The patch fixes the
JALX instruction decoding and uses 2-bit shift.

[1] MIPS Architecture for Programmers Volume II-B: The microMIPS32 Instruction Set

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

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

5 years agoAMDGPU: Move MnemonicAlias out of instruction def hierarchy
Matt Arsenault [Mon, 9 Sep 2019 17:25:35 +0000 (17:25 +0000)]
AMDGPU: Move MnemonicAlias out of instruction def hierarchy

Unfortunately MnemonicAlias defines a "Predicates" field just like an
instruction or pattern, with a somewhat different interpretation.

This ends up overriding the intended Predicates set by
PredicateControl on the pseudoinstruction defintions with an empty
list. This allowed incorrectly selecting instructions that should have
been rejected due to the SubtargetPredicate from patterns on the
instruction definition.

This does remove the divergent predicate from the 64-bit shift
patterns, which were already not used for the 32-bit shift, so I'm not
sure what the point was. This also removes a second, redundant copy of
the 64-bit divergent patterns.

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

5 years ago[SLP] add test for over-vectorization (PR33958); NFC
Sanjay Patel [Mon, 9 Sep 2019 17:16:03 +0000 (17:16 +0000)]
[SLP] add test for over-vectorization (PR33958); NFC

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

5 years ago[GlobalISel][AArch64] Handle tail calls with non-void return types
Jessica Paquette [Mon, 9 Sep 2019 17:15:56 +0000 (17:15 +0000)]
[GlobalISel][AArch64] Handle tail calls with non-void return types

Just return once you emit the call, which is exactly what SelectionDAG does in
this situation.

Update call-translator-tail-call.ll.

Also update dllimport.ll to show that we tail call here in GISel again. Add
-verify-machineinstrs to the GISel line too, to defend against verifier
failures.

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

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

5 years agoAMDGPU/GlobalISel: Implement LDS G_GLOBAL_VALUE
Matt Arsenault [Mon, 9 Sep 2019 17:13:44 +0000 (17:13 +0000)]
AMDGPU/GlobalISel: Implement LDS G_GLOBAL_VALUE

Handle the simple case that lowers to a constant.

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

5 years agoAMDGPU/GlobalISel: Legalize G_BUILD_VECTOR_TRUNC
Matt Arsenault [Mon, 9 Sep 2019 17:04:18 +0000 (17:04 +0000)]
AMDGPU/GlobalISel: Legalize G_BUILD_VECTOR_TRUNC

Treat this as legal on gfx9 since it can use S_PACK_* instructions for
this.

This isn't used by anything yet. The same will probably apply to
16-bit G_BUILD_VECTOR without the trunc.

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

5 years agoRevert "[MachineCopyPropagation] Remove redundant copies after TailDup via machine-cp"
Dmitri Gribenko [Mon, 9 Sep 2019 16:46:45 +0000 (16:46 +0000)]
Revert "[MachineCopyPropagation] Remove redundant copies after TailDup via machine-cp"

This reverts commit 371359. I'm suspecting a miscompile, I posted a
reproducer to https://reviews.llvm.org/D65267.

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

5 years ago[yaml2obj] Simplify p_filesz/p_memsz computing
Fangrui Song [Mon, 9 Sep 2019 16:45:17 +0000 (16:45 +0000)]
[yaml2obj] Simplify p_filesz/p_memsz computing

This fixes a bug as well. When "FileSize:" (p_filesz) is specified and
different from the actual value, the following code probably should not
use PHeader.p_filesz:

  if (SHeader->sh_offset == PHeader.p_offset + PHeader.p_filesz)
    PHeader.p_memsz += SHeader->sh_size;

Reviewed By: jhenderson

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

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

5 years ago[ARM] Fix loads and stores for predicate vectors
David Green [Mon, 9 Sep 2019 16:35:49 +0000 (16:35 +0000)]
[ARM] Fix loads and stores for predicate vectors

These predicate vectors can usually be loaded and stored with a single
instruction, a VSTR_P0. However this instruction will store the entire P0
predicate, 16 bits, zeroextended to 32bits. Each lane of the the
v4i1/v8i1/v16i1 representing 4/2/1 bits.

As far as I understand, when llvm says "store this v4i1", it really does need
to store 4 bits (or 8, that being the size of a byte, with this bottom 4 as the
interesting bits). For example a bitcast from a v8i1 to a i8 is defined as a
store followed by a load, which is how the code is expanded.

So this instead lowers the v4i1/v8i1 load/store through some shuffles to get
the bits into the correct positions. This, as you might imagine, is not as
efficient as a single instruction. But I believe it is needed for correctness.
v16i1 equally should not load/store 32bits, only storing the 16bits of data.
Stack loads/stores are still using the VSTR_P0 (as can be seen by the test not
changing). This is fine as they are self-consistent, it is only "externally
observable loads/stores" (from our point of view) that need to be corrected.

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

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

5 years agoAMDGPU/GlobalISel: Select atomic loads
Matt Arsenault [Mon, 9 Sep 2019 16:18:07 +0000 (16:18 +0000)]
AMDGPU/GlobalISel: Select atomic loads

A new check for an explicitly atomic MMO is needed to avoid
incorrectly matching pattern for non-atomic loads

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

5 years agoAMDGPU/GlobalISel: Fix RegBankSelect for unaligned, uniform constant loads
Matt Arsenault [Mon, 9 Sep 2019 16:06:37 +0000 (16:06 +0000)]
AMDGPU/GlobalISel: Fix RegBankSelect for unaligned, uniform constant loads

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

5 years agoFix typo in comment noticed in D60295. NFCI.
Simon Pilgrim [Mon, 9 Sep 2019 16:05:59 +0000 (16:05 +0000)]
Fix typo in comment noticed in D60295. NFCI.

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

5 years agoAMDGPU/GlobalISel: Fix regbankselect for uniform extloads
Matt Arsenault [Mon, 9 Sep 2019 16:03:45 +0000 (16:03 +0000)]
AMDGPU/GlobalISel: Fix regbankselect for uniform extloads

There are no scalar extloads.

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

5 years agoAMDGPU: Remove code address space predicates
Matt Arsenault [Mon, 9 Sep 2019 16:02:07 +0000 (16:02 +0000)]
AMDGPU: Remove code address space predicates

Fixes 8-byte, 8-byte aligned LDS loads. 16-byte case still broken due
to not be reported as legal.

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

5 years agoAMDGPU/GlobalISel: Select G_PTR_MASK
Matt Arsenault [Mon, 9 Sep 2019 15:46:13 +0000 (15:46 +0000)]
AMDGPU/GlobalISel: Select G_PTR_MASK

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

5 years agoAMDGPU/GlobalISel: Fix reg bank for uniform LDS loads
Matt Arsenault [Mon, 9 Sep 2019 15:44:16 +0000 (15:44 +0000)]
AMDGPU/GlobalISel: Fix reg bank for uniform LDS loads

The pointer is always a VGPR. Also fix hardcoding the pointer size to
64.

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

5 years agoAMDGPU/GlobalISel: Use known bits for selection
Matt Arsenault [Mon, 9 Sep 2019 15:39:32 +0000 (15:39 +0000)]
AMDGPU/GlobalISel: Use known bits for selection

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

5 years agoAMDGPU/GlobalISel: Legalize wavefrontsize intrinsic
Matt Arsenault [Mon, 9 Sep 2019 15:20:49 +0000 (15:20 +0000)]
AMDGPU/GlobalISel: Legalize wavefrontsize intrinsic

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

5 years agoAMDGPU/GlobalISel: Try generated matcher before add/sub code
Matt Arsenault [Mon, 9 Sep 2019 15:20:44 +0000 (15:20 +0000)]
AMDGPU/GlobalISel: Try generated matcher before add/sub code

This will allow optimization patterns which fold adds away to work.

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

5 years ago[ARM] Remove some spurious MVE reduction instructions.
Simon Tatham [Mon, 9 Sep 2019 15:17:26 +0000 (15:17 +0000)]
[ARM] Remove some spurious MVE reduction instructions.

The family of 'dual-accumulating' vector multiply-add instructions
(VMLADAV, VMLALDAV and VRMLALDAVH) can all operate on both signed and
unsigned integer types, and they all have an 'exchange' variant (with
an X in the name) that modifies which pairs of vector lanes in the two
inputs are multiplied together. But there's a clause in the spec that
says that the X variants //don't// operate on unsigned integer types,
only signed. You can have X, or unsigned, or neither, but not both.

We didn't notice that clause when we implemented the MC support for
these instructions, so LLVM believes that things like VMLADAVX.U8 do
exist, contradicting the spec. Here I fix that by conditioning them
out in Tablegen.

In order to do that, I've reversed the nesting order of the Tablegen
multiclasses for those instructions. Previously, the innermost
multiclass generated the X and not-X variants, and the one outside
that generated the A and not-A variants. Now X is done by the outer
multiclass, which allows me to bypass that one when I only want the
two not-X variants.

Changing the multiclass nesting order also changes the names of the
instruction ids unless I make a special effort not to. I decided that
while I was changing them anyway I'd make them look nicer; so now the
instructions have names like MVE_VMLADAVs32 or MVE_VMLADAVaxs32,
instead of cumbersome _noacc_noexch suffixes.

The corresponding multiply-subtract instructions are unaffected. Those
don't accept unsigned types at all, either in the spec or in LLVM.

Reviewers: ostannard, dmgreen

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years agoAMDGPU/GlobalISel: Remove dead patterns
Matt Arsenault [Mon, 9 Sep 2019 15:06:06 +0000 (15:06 +0000)]
AMDGPU/GlobalISel: Remove dead patterns

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

5 years ago[NFC][InstCombine] Fixup test i added in rL371352.
Roman Lebedev [Mon, 9 Sep 2019 14:27:39 +0000 (14:27 +0000)]
[NFC][InstCombine] Fixup test i added in rL371352.

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

5 years ago[DFAPacketizer] Reapply: Track resources for packetized instructions
James Molloy [Mon, 9 Sep 2019 13:17:55 +0000 (13:17 +0000)]
[DFAPacketizer] Reapply: Track resources for packetized instructions

Reapply with fix to reduce resources required by the compiler - use
unsigned[2] instead of std::pair. This causes clang and gcc to compile
the generated file multiple times faster, and hopefully will reduce
the resource requirements on Visual Studio also. This fix is a little
ugly but it's clearly the same issue the previous author of
DFAPacketizer faced (the previous tables use unsigned[2] rather uglily
too).

This patch allows the DFAPacketizer to be queried after a packet is formed to work out which
resources were allocated to the packetized instructions.

This is particularly important for targets that do their own bundle packing - it's not
sufficient to know simply that instructions can share a packet; which slots are used is
also required for encoding.

This extends the emitter to emit a side-table containing resource usage diffs for each
state transition. The packetizer maintains a set of all possible resource states in its
current state. After packetization is complete, all remaining resource states are
possible packetization strategies.

The sidetable is only ~500K for Hexagon, but the extra tracking is disabled by default
(most uses of the packetizer like MachinePipeliner don't care and don't need the extra
maintained state).

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

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

5 years ago[Inliner][NFC] Make test less brittle.
Clement Courbet [Mon, 9 Sep 2019 13:08:16 +0000 (13:08 +0000)]
[Inliner][NFC] Make test less brittle.

Summary:
This tests inlining size thresholds, but relies on the output of running
the full O2 pipeline, making it brittle against changes in unrelated
passes.

Only run the inlining pass and set thresholds on the test RUN line
instead.

Found while investigating D60318.

Reviewers: RKSimon, qcolombet

Subscribers: llvm-commits

Tags: #llvm

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

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

5 years ago[ARM][MVE] VCTP instruction selection
Sam Parker [Mon, 9 Sep 2019 12:54:47 +0000 (12:54 +0000)]
[ARM][MVE] VCTP instruction selection

Add codegen support for vctp{8,16,32}.

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

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

5 years agoRevert rL371198 from llvm/trunk: [DFAPacketizer] Track resources for packetized instr...
Simon Pilgrim [Mon, 9 Sep 2019 12:33:22 +0000 (12:33 +0000)]
Revert rL371198 from llvm/trunk: [DFAPacketizer] Track resources for packetized instructions

This patch allows the DFAPacketizer to be queried after a packet is formed to work out which
resources were allocated to the packetized instructions.

This is particularly important for targets that do their own bundle packing - it's not
sufficient to know simply that instructions can share a packet; which slots are used is
also required for encoding.

This extends the emitter to emit a side-table containing resource usage diffs for each
state transition. The packetizer maintains a set of all possible resource states in its
current state. After packetization is complete, all remaining resource states are
possible packetization strategies.

The sidetable is only ~500K for Hexagon, but the extra tracking is disabled by default
(most uses of the packetizer like MachinePipeliner don't care and don't need the extra
maintained state).

Differential Revision: https://reviews.llvm.org/D66936
........
Reverted as this is causing "compiler out of heap space" errors on MSVC 2017/19 NDEBUG builds

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

5 years ago[AArch64][SVE] Implement abs and neg intrinsics
Cullen Rhodes [Mon, 9 Sep 2019 11:21:14 +0000 (11:21 +0000)]
[AArch64][SVE] Implement abs and neg intrinsics

Summary:
This patch implements two arithmetic intrinsics:

      * int_aarch64_sve_abs
      * int_aarch64_sve_neg

testing the support for scalable vector types in intrinsics added in D65930.

Reviewed By: greened

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

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

5 years ago[ARM] Prevent generating NEON stack accesses under MVE.
David Green [Mon, 9 Sep 2019 10:46:25 +0000 (10:46 +0000)]
[ARM] Prevent generating NEON stack accesses under MVE.

We should not be generating Neon stack loads/stores even for these large
registers.

No test here because my understanding is we will only generate these QQPR regs
for intrinsics and VLDn's. The tests will follow once those are available.

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

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

5 years agoGlobalISel: fix unused warnings in release builds.
Tim Northover [Mon, 9 Sep 2019 10:36:58 +0000 (10:36 +0000)]
GlobalISel: fix unused warnings in release builds.

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

5 years agoGlobalISel: add combiner to form indexed loads.
Tim Northover [Mon, 9 Sep 2019 10:04:23 +0000 (10:04 +0000)]
GlobalISel: add combiner to form indexed loads.

Loosely based on DAGCombiner version, but this part is slightly simpler in
GlobalIsel because all address calculation is performed by G_GEP. That makes
the inc/dec distinction moot so there's just pre/post to think about.

No targets can handle it yet so testing is via a special flag that overrides
target hooks.

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

5 years ago[yaml2obj] - Fix BB after r371380
George Rimar [Mon, 9 Sep 2019 09:55:56 +0000 (09:55 +0000)]
[yaml2obj] - Fix BB after r371380

Just a fix for an input file name.

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

5 years ago[lib/ObjectYAML] - Improve and cleanup error reporting in ELFState<ELFT> class.
George Rimar [Mon, 9 Sep 2019 09:43:03 +0000 (09:43 +0000)]
[lib/ObjectYAML] - Improve and cleanup error reporting in ELFState<ELFT> class.

The aim of this patch is to refactor how we handle and report error.

I suggest to use the same approach we use in LLD: delayed error reporting.
For that I introduced 'HasError' flag which triggers when we report an error.
Now we do not exit instantly on any error. The benefits are:

1) There are no more 'exit(1)' calls in the library code.
2) Code was simplified significantly in a few places.
3) It is now possible to print multiple errors instead of only one.

Also, I changed the messages to be lower case and removed a full stop.

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

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

5 years ago[ARM][MVE] Decoding of uqrshl and sqrshl accepts unpredictable encodings
Oliver Stannard [Mon, 9 Sep 2019 08:50:28 +0000 (08:50 +0000)]
[ARM][MVE] Decoding of uqrshl and sqrshl accepts unpredictable encodings

Specify the Unpredictable bits, and return softfails when appropriate.

Patch by Mark Murray!

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

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

5 years ago[ARM][ParallelDSP] Fix for sext input
Sam Parker [Mon, 9 Sep 2019 08:39:14 +0000 (08:39 +0000)]
[ARM][ParallelDSP] Fix for sext input

The incoming accumulator value can be discovered through a sext, in
which case there will be a mismatch between the input and the result.
So sign extend the accumulator input if we're performing a 64-bit mac.

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

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

5 years ago[SystemZ] NFC: use clearRegisterDeads() in SystemZElimCompare.cpp
Jonas Paulsson [Mon, 9 Sep 2019 07:58:57 +0000 (07:58 +0000)]
[SystemZ]  NFC: use clearRegisterDeads() in SystemZElimCompare.cpp

This is simpler than using findRegisterDefOperandIdx() + setIsDead().

Review: Ulrich Weigand.

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

5 years ago[X86] Add broadcast load unfolding support for vpcmpeq/vpcmpgt/vpcmp/vpcmpu.
Craig Topper [Mon, 9 Sep 2019 07:46:11 +0000 (07:46 +0000)]
[X86] Add broadcast load unfolding support for vpcmpeq/vpcmpgt/vpcmp/vpcmpu.

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

5 years ago[X86] Add broadcast load unfolding tests for vpcmpeq/vpcmpgt/vpcmp/vpcmpu.
Craig Topper [Mon, 9 Sep 2019 07:46:07 +0000 (07:46 +0000)]
[X86] Add broadcast load unfolding tests for vpcmpeq/vpcmpgt/vpcmp/vpcmpu.

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

5 years ago[X86] Add broadcast load unfold support for smin/umin/smax/umax.
Craig Topper [Mon, 9 Sep 2019 06:32:24 +0000 (06:32 +0000)]
[X86] Add broadcast load unfold support for smin/umin/smax/umax.

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

5 years ago[X86] Add broadcast load unfolding tests for smin/umin/smax/smin.
Craig Topper [Mon, 9 Sep 2019 06:32:20 +0000 (06:32 +0000)]
[X86] Add broadcast load unfolding tests for smin/umin/smax/smin.

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

5 years agoAMDGPU: Remove pointless wrapper nodes for init.exec intrinsics
Matt Arsenault [Mon, 9 Sep 2019 05:49:52 +0000 (05:49 +0000)]
AMDGPU: Remove pointless wrapper nodes for init.exec intrinsics

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

5 years ago[X86] Add broadcast load unfolding support for VMAXPS/PD and VMINPS/PD.
Craig Topper [Mon, 9 Sep 2019 04:25:01 +0000 (04:25 +0000)]
[X86] Add broadcast load unfolding support for VMAXPS/PD and VMINPS/PD.

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

5 years ago[X86] Add broadcast load unfolding tests for vmaxps/pd and vminps/pd
Craig Topper [Mon, 9 Sep 2019 04:24:57 +0000 (04:24 +0000)]
[X86] Add broadcast load unfolding tests for vmaxps/pd and vminps/pd

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

5 years ago[X86] Add fp128 test cases for ceil/floor/trunc/nearbyint/rint/round libcalls.
Craig Topper [Mon, 9 Sep 2019 02:44:46 +0000 (02:44 +0000)]
[X86] Add fp128 test cases for ceil/floor/trunc/nearbyint/rint/round libcalls.

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

5 years ago[MachineCopyPropagation] Remove redundant copies after TailDup via machine-cp
Kai Luo [Mon, 9 Sep 2019 02:32:42 +0000 (02:32 +0000)]
[MachineCopyPropagation] Remove redundant copies after TailDup via machine-cp

Summary:
After tailduplication, we have redundant copies. We can remove these
copies in machine-cp if it's safe to, i.e.
```
$reg0 = OP ...
... <<< No read or clobber of $reg0 and $reg1
$reg1 = COPY $reg0 <<< $reg0 is killed
...
<RET>
```
will be transformed to
```
$reg1 = OP ...
...
<RET>
```

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

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

5 years ago[X86] Add test cases for fptoui/fptosi/sitofp/uitofp between fp128 and i128.
Craig Topper [Mon, 9 Sep 2019 01:35:04 +0000 (01:35 +0000)]
[X86] Add test cases for fptoui/fptosi/sitofp/uitofp between fp128 and i128.

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

5 years ago[X86] Use xorps to create fp128 +0.0 constants.
Craig Topper [Mon, 9 Sep 2019 01:35:00 +0000 (01:35 +0000)]
[X86] Use xorps to create fp128 +0.0 constants.

This matches what we do for f32/f64. gcc also does this for fp128.

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

5 years ago[X86] Add avx and avx512f RUN lines to fp128-cast.ll
Craig Topper [Mon, 9 Sep 2019 01:34:55 +0000 (01:34 +0000)]
[X86] Add avx and avx512f RUN lines to fp128-cast.ll

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

5 years agoRelax opcode checks in test to check for only a number instead of a specific number.
Douglas Yung [Mon, 9 Sep 2019 01:21:33 +0000 (01:21 +0000)]
Relax opcode checks in test to check for only a number instead of a specific number.

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

5 years ago[X86][SSE] SimplifyDemandedVectorEltsForTargetNode - add faux shuffle support.
Simon Pilgrim [Sun, 8 Sep 2019 21:38:33 +0000 (21:38 +0000)]
[X86][SSE] SimplifyDemandedVectorEltsForTargetNode - add faux shuffle support.

This patch decodes target and faux shuffles with getTargetShuffleInputs - a reduced version of resolveTargetShuffleInputs that doesn't resolve SM_SentinelZero cases, so we can correctly remove zero vectors if they aren't demanded.

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

5 years ago[InstCombine][NFC] Some tests for usub overflow+nonzero check improvement (PR43251)
Roman Lebedev [Sun, 8 Sep 2019 21:30:34 +0000 (21:30 +0000)]
[InstCombine][NFC] Some tests for usub overflow+nonzero check improvement (PR43251)

https://rise4fun.com/Alive/kHq

https://bugs.llvm.org/show_bug.cgi?id=43251

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

5 years ago[X86] Add a hack to combineVSelectWithAllOnesOrZeros to turn selects with two zero...
Craig Topper [Sun, 8 Sep 2019 20:56:09 +0000 (20:56 +0000)]
[X86] Add a hack to combineVSelectWithAllOnesOrZeros to turn selects with two zero/undef vector inputs into an all zeroes vector.

If the two zero vectors have undefs in different places they
won't get combined by simplifySelect.

This fixes a regression from an earlier commit.

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

5 years ago[X86] Remove call to getZeroVector from materializeVectorConstant. Add isel patterns...
Craig Topper [Sun, 8 Sep 2019 20:56:05 +0000 (20:56 +0000)]
[X86] Remove call to getZeroVector from materializeVectorConstant. Add isel patterns for zero vectors with all types.

The change to avx512-vec-cmp.ll is a regression, but should be
easy to fix. It occurs because the getZeroVector call was
canonicalizing both sides to the same node, then SimplifySelect
was able to simplify it. But since only called getZeroVector
on some VTs this isn't a robust way to combine this.

The change to vector-shuffle-combining-ssse3.ll is more
instructions, but removes a constant pool load so its unclear
if its a regression or not.

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

5 years ago[InstSimplify] simplifyUnsignedRangeCheck(): if we know that X != 0, handle more...
Roman Lebedev [Sun, 8 Sep 2019 20:14:15 +0000 (20:14 +0000)]
[InstSimplify] simplifyUnsignedRangeCheck(): if we know that X != 0, handle more cases (PR43246)

Summary:
This is motivated by D67122 sanitizer check enhancement.
That patch seemingly worsens `-fsanitize=pointer-overflow`
overhead from 25% to 50%, which strongly implies missing folds.

In this particular case, given
```
char* test(char& base, unsigned long offset) {
  return &base + offset;
}
```
it will end up producing something like
https://godbolt.org/z/LK5-iH
which after optimizations reduces down to roughly
```
define i1 @t0(i8* nonnull %base, i64 %offset) {
  %base_int = ptrtoint i8* %base to i64
  %adjusted = add i64 %base_int, %offset
  %non_null_after_adjustment = icmp ne i64 %adjusted, 0
  %no_overflow_during_adjustment = icmp uge i64 %adjusted, %base_int
  %res = and i1 %non_null_after_adjustment, %no_overflow_during_adjustment
  ret i1 %res
}
```
Without D67122 there was no `%non_null_after_adjustment`,
and in this particular case we can get rid of the overhead:

Here we add some offset to a non-null pointer,
and check that the result does not overflow and is not a null pointer.
But since the base pointer is already non-null, and we check for overflow,
that overflow check will already catch the null pointer,
so the separate null check is redundant and can be dropped.

Alive proofs:
https://rise4fun.com/Alive/WRzq

There are more patterns of "unsigned-add-with-overflow", they are not handled here,
but this is the main pattern, that we currently consider canonical,
so it makes sense to handle it.

https://bugs.llvm.org/show_bug.cgi?id=43246

Reviewers: spatel, nikic, vsk

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits, reames

Tags: #llvm

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

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

5 years ago[InstCombine] add tests for icmp with srem operand; NFC
Sanjay Patel [Sun, 8 Sep 2019 19:48:47 +0000 (19:48 +0000)]
[InstCombine] add tests for icmp with srem operand; NFC

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

5 years ago[X86] X86DAGToDAGISel::combineIncDecVector(): call getSplatBuildVector() manually
Roman Lebedev [Sun, 8 Sep 2019 19:36:13 +0000 (19:36 +0000)]
[X86] X86DAGToDAGISel::combineIncDecVector(): call getSplatBuildVector() manually

As reported in post-commit review of r370327,
there is some case where the code crashes.

As discussed with Craig Topper, the problem is that getConstant()
internally calls getSplatBuildVector(), so we don't insert
the constant itself.

If we do that manually we're good.

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

5 years ago[X86] Use DAG.getConstant instead of getZeroVector in combinePMULDQ.
Craig Topper [Sun, 8 Sep 2019 19:24:42 +0000 (19:24 +0000)]
[X86] Use DAG.getConstant instead of getZeroVector in combinePMULDQ.

getZeroVector canonicalizes the type to vXi32, but that's a
legalization action. We should use the most correct type if
possible.

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

5 years ago[DAGCombiner][X86][ARM] Teach visitMULO to fold multiplies with 0 to 0 and no carry.
Craig Topper [Sun, 8 Sep 2019 19:24:39 +0000 (19:24 +0000)]
[DAGCombiner][X86][ARM] Teach visitMULO to fold multiplies with 0 to 0 and no carry.

I modified the ARM test to use two inputs instead of 0 so the
test hopefully still tests what was intended.

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

5 years ago[X86] Teach materializeVectorConstant to not call getZeroVector/getOnesVector on...
Craig Topper [Sun, 8 Sep 2019 19:24:29 +0000 (19:24 +0000)]
[X86] Teach materializeVectorConstant to not call getZeroVector/getOnesVector on the types we already have isel patterns for.

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

5 years ago[InstCombine] fold extract+insert into identity shuffle
Sanjay Patel [Sun, 8 Sep 2019 19:03:01 +0000 (19:03 +0000)]
[InstCombine] fold extract+insert into identity shuffle

This is similar to the existing fold for splats added with:
rL365379

If we can adjust the shuffle mask to include another element
in an identity mask (if it changes vector length, that's an
extract/insert subvector operation in the backend), then that
can eliminate extractelement/insertelement pairs in IR.

All targets are expected to lower shuffles with identity masks
efficiently.

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

5 years ago[NFC][InstSimplify] Some tests for dropping null check after uadd.with.overflow of...
Roman Lebedev [Sun, 8 Sep 2019 17:50:40 +0000 (17:50 +0000)]
[NFC][InstSimplify] Some tests for dropping null check after uadd.with.overflow of non-null (PR43246)

https://rise4fun.com/Alive/WRzq

Name: C <= Y && Y != 0  -->  C <= Y  iff C != 0
Pre: C != 0
  %y_is_nonnull = icmp ne i64 %y, 0
  %no_overflow = icmp ule i64 C, %y
  %r = and i1 %y_is_nonnull, %no_overflow
=>
  %r = %no_overflow

Name: C <= Y || Y != 0  -->  Y != 0  iff C != 0
Pre: C != 0
  %y_is_nonnull = icmp ne i64 %y, 0
  %no_overflow = icmp ule i64 C, %y
  %r = or i1 %y_is_nonnull, %no_overflow
=>
  %r = %y_is_nonnull

Name: C > Y || Y == 0  -->  C > Y  iff C != 0
Pre: C != 0
  %y_is_null = icmp eq i64 %y, 0
  %overflow = icmp ugt i64 C, %y
  %r = or i1 %y_is_null, %overflow
=>
  %r = %overflow

Name: C > Y && Y == 0  -->  Y == 0  iff C != 0
Pre: C != 0
  %y_is_null = icmp eq i64 %y, 0
  %overflow = icmp ugt i64 C, %y
  %r = and i1 %y_is_null, %overflow
=>
  %r = %y_is_null

https://bugs.llvm.org/show_bug.cgi?id=43246

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

5 years ago[DebugInfo][X86] Describe call site values for zero-valued imms
David Stenberg [Sun, 8 Sep 2019 14:22:06 +0000 (14:22 +0000)]
[DebugInfo][X86] Describe call site values for zero-valued imms

Summary:
Add zero-materializing XORs to X86's describeLoadedValue() hook in order
to produce call site values.

I have had to change the defs logic in collectCallSiteParameters() a bit
to be able to describe the XORs. The XORs implicitly define $eflags,
which would cause them to never be considered, due to a guard condition
that I->getNumDefs() is one. I have changed that condition so that we
now only consider instructions where a forwarded register overlaps with
the instruction's single explicit define. We still need to collect the implicit
defines of other forwarded registers to remove them from the work list.
I'm not sure how to move towards supporting instructions with multiple
explicit defines, cases where forwarded register are implicitly defined,
and/or cases where an instruction produces values for multiple forwarded
registers. Perhaps the describeLoadedValue() hook should take a register
argument, and we then leave it up to the hook to describe the loaded
value in that register? I have not yet encountered a situation where
that would be necessary though.

Reviewers: aprantl, vsk, djtodoro, NikolaPrica

Reviewed By: vsk

Subscribers: ychen, hiraditya, llvm-commits

Tags: #debug-info, #llvm

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

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

5 years ago[NFC] Make the describeLoadedValue() hook return machine operand objects
David Stenberg [Sun, 8 Sep 2019 14:05:10 +0000 (14:05 +0000)]
[NFC] Make the describeLoadedValue() hook return machine operand objects

Summary:
This changes the ParamLoadedValue pair which the describeLoadedValue()
hook returns so that MachineOperand objects are returned instead of
pointers.

When describing call site values we may need to describe operands which
are not part of the instruction. One such example is zero-materializing
XORs on x86, which I have implemented support for in a child revision.
Instead of having to return a pointer to an operand stored somewhere
outside the instruction, start returning objects directly instead, as
that simplifies the code.

The MachineOperand class only holds POD members, and on x86-64 it is 32
bytes large. That combined with copy elision means that the overhead of
returning a machine operand object from the hook does not become very
large.

I benchmarked this on a 8-thread i7-8650U machine with 32 GB RAM. The
benchmark consisted of building a clang 8.0 binary configured with:

  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DLLVM_TARGETS_TO_BUILD=X86 \
  -DLLVM_USE_SANITIZER=Address \
  -DCMAKE_CXX_FLAGS="-Xclang -femit-debug-entry-values -stdlib=libc++"

The average wall clock time increased by 4 seconds, from 62:05 to
62:09, which is an 0.1% increase.

Reviewers: aprantl, vsk, djtodoro, NikolaPrica

Reviewed By: vsk

Subscribers: hiraditya, ychen, llvm-commits

Tags: #debug-info, #llvm

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

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

5 years ago[ARM] Remove declaration of unimplemented function. NFC.
David Green [Sun, 8 Sep 2019 13:13:15 +0000 (13:13 +0000)]
[ARM] Remove declaration of unimplemented function. NFC.

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

5 years ago[X86][SSE] Fix out of range shift introduced in D67070/rL371328
Simon Pilgrim [Sun, 8 Sep 2019 12:44:22 +0000 (12:44 +0000)]
[X86][SSE] Fix out of range shift introduced in D67070/rL371328

Use APInt to create the comparison mask instead.

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

5 years ago[X86] Add test case for PR32546
Simon Pilgrim [Sun, 8 Sep 2019 11:56:07 +0000 (11:56 +0000)]
[X86] Add test case for PR32546

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

5 years ago[X86][SSE] Add support for <64 x i1> bool reduction
Simon Pilgrim [Sun, 8 Sep 2019 11:46:21 +0000 (11:46 +0000)]
[X86][SSE] Add support for <64 x i1> bool reduction

This generalizes the existing <32 x i1> pre-AVX2 split code to support reductions from <64 x i1> as well, we can probably generalize to any larger pow2 case in the future if the (unlikely) need ever arises.

We still need to tweak combineBitcastvxi1 to improve AVX512F codegen as its assumes vXi1 types should be handled on the mask registers even when they aren't legal.

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

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

5 years ago[StackMap] Current stackmap version should be 3. NFC.
Xing GUO [Sun, 8 Sep 2019 11:42:51 +0000 (11:42 +0000)]
[StackMap] Current stackmap version should be 3. NFC.

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

5 years ago[X86] Make getZeroVector return floating point vectors in their native type on SSE2...
Craig Topper [Sun, 8 Sep 2019 00:43:52 +0000 (00:43 +0000)]
[X86] Make getZeroVector return floating point vectors in their native type on SSE2 and later.

isel used to require zero vectors to be canonicalized to a single
type to minimize the number of patterns needed to match. This is
 no longer required.

I plan to do this to integers too, but floating point was simpler
to start with. Integer has a complication where v32i16/v64i8 aren't
legal when the other 512-bit integer types are.

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

5 years ago[X86] Add support for unfold broadcast loads from FMA instructions.
Craig Topper [Sat, 7 Sep 2019 21:54:40 +0000 (21:54 +0000)]
[X86] Add support for unfold broadcast loads from FMA instructions.

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

5 years ago[X86] Add broadcast load unfolding tests for FMA instructions.
Craig Topper [Sat, 7 Sep 2019 21:54:36 +0000 (21:54 +0000)]
[X86] Add broadcast load unfolding tests for FMA instructions.

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

5 years ago[aarch64] Add combine patterns for fp16 fmla
Sebastian Pop [Sat, 7 Sep 2019 20:24:51 +0000 (20:24 +0000)]
[aarch64] Add combine patterns for fp16 fmla

This patch enables generation of fused multiply add/sub for instructions operating on fp16.
Tested on aarch64-linux.

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

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

5 years ago[X86] Add prefer-128-bit subtarget feature.
Craig Topper [Sat, 7 Sep 2019 19:54:22 +0000 (19:54 +0000)]
[X86] Add prefer-128-bit subtarget feature.

Summary:
Similar to the previous prefer-256-bit flag. We might want to
enable this by default some CPUs. This just starts the initial
work to implement and prove that it effects TTI's vector width.

Reviewers: RKSimon, echristo, spatel, atdt

Reviewed By: RKSimon

Subscribers: lebedev.ri, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-nm] - Fix a bug and unbreak ASan BB.
George Rimar [Sat, 7 Sep 2019 19:45:27 +0000 (19:45 +0000)]
[llvm-nm] - Fix a bug and unbreak ASan BB.

BB: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/13820/steps/check-llvm%20asan/logs/stdio

rL371074 revealed a bug in llvm-nm.

This patch fixes it.

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

5 years agoFix typo. NFCI
Simon Pilgrim [Sat, 7 Sep 2019 18:09:09 +0000 (18:09 +0000)]
Fix typo. NFCI

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

5 years ago[X86] Avoid uses of getZextValue(). NFCI.
Simon Pilgrim [Sat, 7 Sep 2019 16:13:57 +0000 (16:13 +0000)]
[X86] Avoid uses of getZextValue(). NFCI.

Use getAPIntValue() directly - this is mainly a best practice style issue to help prevent fuzz tests blowing up when a i12345 (or whatever) is generated.

Use getConstantOperandVal/getConstantOperandAPInt wrappers where possible.

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

5 years ago[X86][AVX] Add 'f5' v4f64 shuffle test mentioned in D66004
Simon Pilgrim [Sat, 7 Sep 2019 16:13:48 +0000 (16:13 +0000)]
[X86][AVX] Add 'f5' v4f64 shuffle test mentioned in D66004

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

5 years ago[ELF][MC] Set types of aliases of IFunc to STT_GNU_IFUNC
Fangrui Song [Sat, 7 Sep 2019 14:58:47 +0000 (14:58 +0000)]
[ELF][MC] Set types of aliases of IFunc to STT_GNU_IFUNC

```
.type  foo,@gnu_indirect_function
.set   foo,foo_resolver

.set foo2,foo
.set foo3,foo2
```

The types of foo2 and foo3 should be STT_GNU_IFUNC, but we currently
resolve them to the type of foo_resolver. This patch fixes it.

Differential Revision: https://reviews.llvm.org/D67206
Patch by Senran Zhang

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

5 years ago[SimplifyCFG][NFC] Autogenerate PhiEliminate3.ll
Roman Lebedev [Sat, 7 Sep 2019 13:53:14 +0000 (13:53 +0000)]
[SimplifyCFG][NFC] Autogenerate PhiEliminate3.ll

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

5 years ago[SimplifyCFG][NFC] Autogenerate two tests
Roman Lebedev [Sat, 7 Sep 2019 13:35:54 +0000 (13:35 +0000)]
[SimplifyCFG][NFC] Autogenerate two tests

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

5 years ago[CodeGen] Handle SMULFIXSAT with scale zero in TargetLowering::expandFixedPointMul
Bjorn Pettersson [Sat, 7 Sep 2019 12:16:23 +0000 (12:16 +0000)]
[CodeGen] Handle SMULFIXSAT with scale zero in TargetLowering::expandFixedPointMul

Summary:
Normally TargetLowering::expandFixedPointMul would handle
SMULFIXSAT with scale zero by using an SMULO to compute the
product and determine if saturation is needed (if overflow
happened). But if SMULO isn't custom/legal it falls through
and uses the same technique, using MULHS/SMUL_LOHI, as used
for non-zero scales.

Problem was that when checking for overflow (handling saturation)
when not using MULO we did not expect to find a zero scale. So
we ended up in an assertion when doing
  APInt::getLowBitsSet(VTSize, Scale - 1)

This patch fixes the problem by adding a new special case for
how saturation is computed when scale is zero.

Reviewers: RKSimon, bevinh, leonardchan, spatel

Reviewed By: RKSimon

Subscribers: wuzish, nemanjai, hiraditya, MaskRay, jsji, llvm-commits

Tags: #llvm

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

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

5 years ago[Intrinsic] Add the llvm.umul.fix.sat intrinsic
Bjorn Pettersson [Sat, 7 Sep 2019 12:16:14 +0000 (12:16 +0000)]
[Intrinsic] Add the llvm.umul.fix.sat intrinsic

Summary:
Add an intrinsic that takes 2 unsigned integers with
the scale of them provided as the third argument and
performs fixed point multiplication on them. The
result is saturated and clamped between the largest and
smallest representable values of the first 2 operands.

This is a part of implementing fixed point arithmetic
in clang where some of the more complex operations
will be implemented as intrinsics.

Patch by: leonardchan, bjope

Reviewers: RKSimon, craig.topper, bevinh, leonardchan, lebedev.ri, spatel

Reviewed By: leonardchan

Subscribers: ychen, wuzish, nemanjai, MaskRay, jsji, jdoerfert, Ka-Ka, hiraditya, rjmccall, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Fix pshuflw formation from repeated shuffle mask (PR43230)
Nikita Popov [Sat, 7 Sep 2019 12:13:44 +0000 (12:13 +0000)]
[X86] Fix pshuflw formation from repeated shuffle mask (PR43230)

Fix for https://bugs.llvm.org/show_bug.cgi?id=43230.

When creating PSHUFLW from a repeated shuffle mask, we have to apply
the checks to the repeated mask, not the original one. For the test
case from PR43230 the inspected part of the original mask is all undef.

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

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

5 years ago[LVI] Look through extractvalue of insertvalue
Nikita Popov [Sat, 7 Sep 2019 12:03:59 +0000 (12:03 +0000)]
[LVI] Look through extractvalue of insertvalue

This addresses the issue mentioned on D19867. When we simplify
with.overflow instructions in CVP, we leave behind extractvalue
of insertvalue sequences that LVI no longer understands. This
means that we can not simplify any instructions based on the
with.overflow anymore (until some over pass like InstCombine
cleans them up).

This patch extends LVI extractvalue handling by calling
SimplifyExtractValueInst (which doesn't do anything more than
constant folding + looking through insertvalue) and using the block
value of the simplification.

A possible alternative would be to do something similar to
SimplifyIndVars, where we instead directly try to replace
extractvalue users of the with.overflow. This would need some
additional structural changes to CVP, as it's currently not legal
to remove anything but the current instruction -- we'd have to
introduce a worklist with instructions scheduled for deletion or similar.

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

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

5 years ago[X86] Add test for PR43230; NFC
Nikita Popov [Sat, 7 Sep 2019 12:03:48 +0000 (12:03 +0000)]
[X86] Add test for PR43230; NFC

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

5 years ago[DwarfExpression] Disallow some rewrites to avoid undefined behavior
Bjorn Pettersson [Sat, 7 Sep 2019 11:40:10 +0000 (11:40 +0000)]
[DwarfExpression] Disallow some rewrites to avoid undefined behavior

Summary:
The value operand in DW_OP_plus_uconst/DW_OP_constu value can be
large (it uses uint64_t as representation internally in LLVM).
This means that in the uint64_t to int conversions, previously done
by DwarfExpression::addMachineRegExpression, could lose information.
Also, the negation done in "-Offset" was undefined behavior in case
Offset was exactly INT_MIN.

To avoid the above problems, we now avoid transformation like
 [Reg, DW_OP_plus_uconst, Offset] --> [DW_OP_breg, Offset]
and
 [Reg, DW_OP_constu, Offset, DW_OP_plus]  --> [DW_OP_breg, Offset]
when Offset > INT_MAX.

And we avoid to transform
 [Reg, DW_OP_constu, Offset, DW_OP_minus] --> [DW_OP_breg,-Offset]
when Offset > INT_MAX+1.

The patch also adjusts DwarfCompileUnit::constructVariableDIEImpl
to make sure that "DW_OP_constu, Offset, DW_OP_minus" is used
instead of "DW_OP_plus_uconst, Offset" when creating DIExpressions
with negative frame index offsets.

Notice that this might just be the tip of the iceberg. There
are lots of fishy handling related to these constants. I think both
DIExpression::appendOffset and DIExpression::extractIfOffset may
trigger undefined behavior for certain values.

Reviewers: sdesmalen, rnk, JDevlieghere

Reviewed By: JDevlieghere

Subscribers: jholewinski, aprantl, hiraditya, ychen, uabelho, llvm-commits

Tags: #debug-info, #llvm

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

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

5 years ago[DebugInfo] Pre-commit of test case for DW_OP_breg/DW_OP_fbreg folds
Bjorn Pettersson [Sat, 7 Sep 2019 11:39:57 +0000 (11:39 +0000)]
[DebugInfo] Pre-commit of test case for DW_OP_breg/DW_OP_fbreg folds

This currently triggers undefined behavior if executed with an
ubsan build. It is just a precommit of the test case to show that
we got a problem.

Fix is proposed in https://reviews.llvm.org/D67263 and plan is to
commit the fix directly after this patch.

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

5 years agoFix MSVC "32-bit shift implicitly converted to 64 bits" warnings. NFCI.
Simon Pilgrim [Sat, 7 Sep 2019 11:04:04 +0000 (11:04 +0000)]
Fix MSVC "32-bit shift implicitly converted to 64 bits" warnings. NFCI.

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

5 years ago[SimplifyCFG][NFC] Make merge-cond-stores-cost.ll X86-specific, and rewrite it
Roman Lebedev [Sat, 7 Sep 2019 10:55:04 +0000 (10:55 +0000)]
[SimplifyCFG][NFC] Make merge-cond-stores-cost.ll X86-specific, and rewrite it

We clearly perform store-merging, even though div is really costly.

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

5 years ago[Attributor] Make unimplemented method pure virtual.
Benjamin Kramer [Sat, 7 Sep 2019 10:27:13 +0000 (10:27 +0000)]
[Attributor] Make unimplemented method pure virtual.

Otherwise the compiler mistakes it for a vtable anchor.

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

5 years ago[SimplifyCFG][NFC] Show that we don't consider the cost when merging cond stores
Roman Lebedev [Sat, 7 Sep 2019 09:25:26 +0000 (09:25 +0000)]
[SimplifyCFG][NFC] Show that we don't consider the cost when merging cond stores

We count instruction count in each BB's separately, not their cost.

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

5 years ago[SimplifyCFG][NFC] Regenerate merge-cond-stores* tests
Roman Lebedev [Sat, 7 Sep 2019 09:25:18 +0000 (09:25 +0000)]
[SimplifyCFG][NFC] Regenerate merge-cond-stores* tests

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

5 years ago[SimplifyCFG] SpeculativelyExecuteBB(): It's SpeculatedInstructions, not SpeculationCost
Roman Lebedev [Sat, 7 Sep 2019 09:06:06 +0000 (09:06 +0000)]
[SimplifyCFG] SpeculativelyExecuteBB(): It's SpeculatedInstructions, not SpeculationCost

It counts the number of instructions we are ok speculating
(at most 1 there), not their cost, so rename accordingly.

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

5 years agoReplicate the change "[Alignment][NFC] Use Align with TargetLowering::setMinFunctionA...
Sylvestre Ledru [Sat, 7 Sep 2019 08:38:46 +0000 (08:38 +0000)]
Replicate the change "[Alignment][NFC] Use Align with TargetLowering::setMinFunctionAlignment"
on AVR to avoid a breakage.
See r371200 / https://reviews.llvm.org/D67229

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

5 years ago[Attributor] ValueSimplify Abstract Attribute
Hideto Ueno [Sat, 7 Sep 2019 07:03:05 +0000 (07:03 +0000)]
[Attributor] ValueSimplify Abstract Attribute

Summary:
This patch introduces initial `AAValueSimplify` which simplifies a value in a context.

example
- (for function returned) If all the return values are the same and constant, then we can replace callsite returned with the constant.
- If an internal function takes the same value(constant) as an argument in the callsite, then we can replace the argument with that constant.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[git-llvm] Do not reinvent `@{upstream}`
David Zarzycki [Sat, 7 Sep 2019 06:44:52 +0000 (06:44 +0000)]
[git-llvm] Do not reinvent `@{upstream}`

Make `git-llvm` more robust when used with a nontrivial repository.

https://reviews.llvm.org/D67262

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

5 years agoRevert [CodeGen] Fix typos to run tests. NFC.
Xing GUO [Sat, 7 Sep 2019 05:14:47 +0000 (05:14 +0000)]
Revert [CodeGen] Fix typos to run tests. NFC.

This reverts r371286 (git commit b38105bbd0f7dfef424a4f096aa6a6b7b467fe99)

r371286 caused build bots' failure. I'll check it.

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