Commit Graph

31742 Commits

Author SHA1 Message Date
Craig Topper 46a61cfdb6 [X86] Support LEA64_32r in processInstrForSlow3OpLEA and use INC/DEC when possible.
Move the erasing and iterator updating inside to match the
other slow LEA function.

I've adapted code from optTwoAddrLEA and basically rebuilt the
implementation here. We do lose the kill flags now just like
optTwoAddrLEA. This runs late enough in the pipeline that
shouldn't really be a problem.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373877 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-07 06:27:55 +00:00
Yi-Hong Lyu 442747eb5a [NFC][CGP] Tests for making ICMP_EQ use CR result of ICMP_S(L|G)T dominators
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373876 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-07 05:29:11 +00:00
Simon Pilgrim 2e0c9d36c2 [X86][AVX] Access a scalar float/double as a free extract from a broadcast load (PR43217)
If a fp scalar is loaded and then used as both a scalar and a vector broadcast, perform the load as a broadcast and then extract the scalar for 'free' from the 0th element.

This involved switching the order of the X86ISD::BROADCAST combines so we only convert to X86ISD::BROADCAST_LOAD once all other canonicalizations have been attempted.

Adds a DAGCombinerInfo::recursivelyDeleteUnusedNodes wrapper.

Fixes PR43217

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373871 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 21:11:45 +00:00
Craig Topper 9b2a6eb0bb [X86] Add custom type legalization for v16i64->v16i8 truncate and v8i64->v8i8 truncate when v8i64 isn't legal
Summary:
The default legalization for v16i64->v16i8 tries to create a multiple stage truncate concatenating after each stage and truncating again. But avx512 implements truncates with multiple uops. So it should be better to truncate all the way to the desired element size and then concatenate the pieces using unpckl instructions. This minimizes the number of 2 uop truncates. The unpcks are all single uop instructions.

I tried to handle this by just custom splitting the v16i64->v16i8 shuffle. And hoped that the DAG combiner would leave the two halves in the state needed to make D68374 do the job for each half. This worked for the first half, but the second half got messed up. So I've implemented custom handling for v8i64->v8i8 when v8i64 needs to be split to produce the VTRUNCs directly.

Reviewers: RKSimon, spatel

Reviewed By: RKSimon

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373864 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 18:43:08 +00:00
Craig Topper 0d4ac91263 [LegalizeTypes][X86] When splitting a vselect for type legalization, don't split a setcc condition if the setcc input is legal and vXi1 conditions are supported
Summary: The VSELECT splitting code tries to split a setcc input as well. But on avx512 where mask registers are well supported it should be better to just split the mask and use a single compare.

Reviewers: RKSimon, spatel, efriedma

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373863 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 18:43:03 +00:00
Sanjay Patel a41537373a Revert [DAGCombine] Match more patterns for half word bswap
This reverts r373850 (git commit 25ba49824d2d4f2347b4a7cb1623600a76ce9433)

This patch appears to cause multiple codegen regression test failures - http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/10680

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373853 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 15:27:34 +00:00
Amaury Sechet 778c571697 [DAGCombine] Match more patterns for half word bswap
Summary: It ensures that the bswap is generated even when a part of the subtree already matches a bswap transform.

Reviewers: craig.topper, efriedma, RKSimon, lebedev.ri

Subscribers: llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373850 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 14:14:55 +00:00
Simon Pilgrim 24205862a4 [X86][SSE] matchVectorShuffleAsBlend - use Zeroable element mask directly.
We can make use of the Zeroable mask to indicate which elements we can safely set to zero instead of creating a target shuffle mask on the fly.

This allows us to remove createTargetShuffleMask.

This is part of the work to fix PR43024 and allow us to use SimplifyDemandedElts to simplify shuffle chains - we need to get to a point where the target shuffle masks isn't adjusted by its source inputs in setTargetShuffleZeroElements but instead we cache them in a parallel Zeroable mask.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373846 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 12:38:38 +00:00
David Zarzycki 2fa71f8ee2 [X86] Enable AVX512BW for memcmp()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373845 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 10:25:52 +00:00
Matt Arsenault c8e8fe1934 AMDGPU/GlobalISel: RegBankSelect DS GWS intrinsics
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373840 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 01:37:38 +00:00
Matt Arsenault 9ab5b297df AMDGPU/GlobalISel: Lower G_ATOMIC_CMPXCHG_WITH_SUCCESS
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373839 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 01:37:37 +00:00
Matt Arsenault 97454bf24b GlobalISel: Partially implement lower for G_EXTRACT
Turn into shift and truncate. Doesn't yet handle pointers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373838 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 01:37:35 +00:00
Matt Arsenault 1c6d4fc3e0 AMDGPU/GlobalISel: Fix RegBankSelect for sendmsg intrinsics
This wasn't updated for the immarg handling change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373837 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-06 01:37:34 +00:00
Craig Topper 7c5761290d [FastISel] Copy the inline assembly dialect to the INLINEASM instruction.
Fixes PR43575.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373836 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-05 23:21:17 +00:00
Simon Pilgrim e4e0ad4d62 [X86][AVX] Push sign extensions of comparison bool results through bitops (PR42025)
As discussed on PR42025, with more complex boolean math we can end up with many truncations/extensions of the comparison results through each bitop.

This patch handles the cases introduced in combineBitcastvxi1 by pushing the sign extension through the AND/OR/XOR ops so its just the original SETCC ops that gets extended.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373834 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-05 20:49:34 +00:00
David Bolvansky c9d62b3da1 [SelectionDAG] Add tests for LKK algorithm
Added some tests testing urem and srem operations with a constant divisor.

Patch by TG908 (Tim Gymnich)

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373830 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-05 14:29:25 +00:00
Philip Reames c833b3773e Fix a *nasty* miscompile in experimental unordered atomic lowering
This is an omission in rL371441.  Loads which happened to be unordered weren't being added to the PendingLoad set, and thus weren't be ordered w/respect to side effects which followed before the end of the block.

Included test case is how I spotted this.  We had an atomic load being folded into a using instruction after a fence that load was supposed to be ordered with.  I'm sure it showed up a bunch of other ways as well.

Spotted via manual inspecting of assembly differences in a corpus w/and w/o the new experimental mode.  Finding this with testing would have been "unpleasant".  



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373814 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-05 00:32:10 +00:00
Philip Reames a9ab690c06 [Test] Add a test case fo a missed oppurtunity in implicit null checking
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373813 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 23:46:26 +00:00
Reid Kleckner 47b3510fce Revert [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
This reverts r371177 (git commit f879c6875563c0a8cd838f1e13b14dd33558f1f8)

It caused PR43566 by removing empty, address-taken MachineBasicBlocks.
Such blocks may have references from blockaddress or other operands, and
need more consideration to be removed.

See the PR for a test case to use when relanding.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373805 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 22:24:21 +00:00
Jessica Paquette 08c6feac7d [MachineOutliner] Disable outlining from noreturn functions
Outlining from noreturn functions doesn't do the correct thing right now. The
outliner should respect that the caller is marked noreturn. In the event that
we have a noreturn function, and the outlined code is in tail position, the
outliner will not see that the outlined function should be tail called. As a
result, you end up with a regular call containing a return.

Fixing this requires that we check that all candidates live inside noreturn
functions. So, for the sake of correctness, don't outline from noreturn
functions right now.

Add machine-outliner-noreturn.mir to test this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373791 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 21:24:12 +00:00
Eli Friedman 71efcdf2cc [ScheduleDAG] When a node is cloned, add an edge between the nodes.
InstrEmitter's virtual register handling assumes that clones are emitted
after the cloned node.  Make sure this assumption actually holds.

Fixes a "Node emitted out of order - early" assertion on the testcase.

This is probably a very rare case to actually hit in practice; even
without the explicit edge, the scheduler will usually end up scheduling
the nodes in the expected order due to other constraints.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373782 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 19:51:40 +00:00
Craig Topper 1690198db2 [X86] Remove isel patterns for mask vpcmpgt/vpcmpeq. Switch vpcmp to these based on the immediate in MCInstLower
The immediate form of VPCMP can represent these completely. The
vpcmpgt/eq are just shorter encodings.

This patch removes the isel patterns and just swaps the opcodes
and removes the immediate in MCInstLower. This matches where we do
some other encodings tricks.

Removes over 10K bytes from the isel table.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373766 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 18:02:46 +00:00
Craig Topper b16ec5f870 [X86] Add DAG combine to form saturating VTRUNCUS/VTRUNCS from VTRUNC
We already do this for ISD::TRUNCATE, but we can do the same for X86ISD::VTRUNC

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373765 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 17:53:18 +00:00
Kevin P. Neal 5a8b466d55 [FPEnv] Strict FP tests should use the requisite function attributes.
A set of function attributes is required in any function that uses constrained
floating point intrinsics. None of our tests use these attributes.

This patch fixes this.

These tests have been tested against the IR verifier changes in D68233.

Reviewed by:	andrew.w.kaylor, cameron.mcinally, uweigand
Approved by:	andrew.w.kaylor
Differential Revision:	https://reviews.llvm.org/D67925

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373761 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 17:03:46 +00:00
Tim Northover dc3e84b27d ARM-Darwin: keep the frame register reserved even if not updated.
Darwin platforms need the frame register to always point at a valid record even
if it's not updated in a leaf function. Backtraces are more important than one
extra GPR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373738 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 12:29:32 +00:00
Matt Arsenault c15d04b5f6 AMDGPU/GlobalISel: Fix using wrong addrspace for aperture
This was always passing the destination flat address space, when it
should be picking between the two valid source options.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373716 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 08:35:38 +00:00
Matt Arsenault 9556f6366c AMDGPU/GlobalISel: Select G_PTRTOINT
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373715 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 08:35:37 +00:00
Matt Arsenault 0e704fab6e AMDGPU/GlobalISel: Support wave32 waterfall loops
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373714 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 08:35:35 +00:00
David Zarzycki d80d047ed6 [X86] Enable inline memcmp() to use AVX512
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373706 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 07:42:34 +00:00
Shiva Chen 515eefeb33 [RISCV] Split SP adjustment to reduce the offset of callee saved register spill and restore
We would like to split the SP adjustment to reduce the instructions in
prologue and epilogue as the following case. In this way, the offset of
the callee saved register could fit in a single store.

    add     sp,sp,-2032
    sw      ra,2028(sp)
    sw      s0,2024(sp)
    sw      s1,2020(sp)
    sw      s3,2012(sp)
    sw      s4,2008(sp)
    add     sp,sp,-64

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373688 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-04 02:00:57 +00:00
Sanjay Patel f03d2d8516 [DAGCombiner] add operation legality checks before creating shift ops (PR43542)
As discussed on llvm-dev and:
https://bugs.llvm.org/show_bug.cgi?id=43542
...we have transforms that assume shift operations are legal and transforms to
use them are profitable, but that may not hold for simple targets.

In this case, the MSP430 target custom lowers shifts by repeating (many)
simpler/fixed ops. That can be avoided by keeping this code as setcc/select.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373666 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 21:34:04 +00:00
Philip Reames 340a2dfd8c [Tests] Add a unordered atomic load combine test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373659 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 20:28:59 +00:00
Philip Reames 8d78f320ca [Test] Fix inconsistency in alignment in test case
The IR was using a fixed 8 byte alignment, but the MIR portion was using native alignment.  Since the test doesn't appear to be deliberately testing overalignment, just make the IR match the MIR.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373658 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 20:24:18 +00:00
Jinsong Ji df0575511d [AArch64][SVE] Move the testcase into CodeGen dir
https://reviews.llvm.org/rL373600 added an AArch64 testcase in top dir
which should be moved to Codegen dir.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373657 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 20:21:23 +00:00
Jinsong Ji 701a446bf2 [PowerPC] Adjust the naming and operand order of fnmsub patterns
Summary:
This is follow up patch of https://reviews.llvm.org/D67595.
Adjust naming and the Commutable operands for additional patterns
to make it easier to read.

The testcase update also show that we can save some unecessary fmr as
well.

Reviewers: #powerpc, steven.zhang, hfinkel, nemanjai

Reviewed By: #powerpc, nemanjai

Subscribers: wuzish, hiraditya, kbarton, MaskRay, shchenz, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373652 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 19:36:42 +00:00
Craig Topper b8a1095607 [X86] Add v32i8 shuffle lowering strategy to recognize two v4i64 vectors truncated to v4i8 and concatenated into the lower 8 bytes with undef/zero upper bytes.
This patch recognizes the shuffle pattern we get from a
v8i64->v8i8 truncate when v8i64 isn't a legal type.

With VLX we can use two VTRUNCs, unpckldq, and a insert_subvector.

Diffrential Revision: https://reviews.llvm.org/D68374

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373645 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 18:34:42 +00:00
Matt Arsenault 204eb4858d AMDGPU/GlobalISel: Handle RegBankSelect of G_INSERT_VECTOR_ELT
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373639 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:59:03 +00:00
Matt Arsenault 793d83708f AMDGPU/GlobalISel: Split 64-bit vector extracts during RegBankSelect
Register indexing 64-bit elements is possible on the SALU, but not the
VALU. Handle splitting this into two 32-bit indexes. Extend waterfall
loop handling to allow moving a range of instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373638 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:55:27 +00:00
Matt Arsenault bde9662fef AMDGPU/GlobalISel: Allow VGPR to index SGPR register
We can still do a waterfall loop over the index if using a VGPR to
index an SGPR. The result will still be a VGPR, but we can avoid the
wide copy of the source register to a VGPR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373637 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:50:32 +00:00
Matt Arsenault 5e7be8b1bc AMDGPU/GlobalISel: Add some more tests for G_INSERT legalization
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373636 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:50:31 +00:00
Matt Arsenault 0e53d95ce4 AMDGPU/GlobalISel: Fix mutationIsSane assert v8s8 and
This would try to do FewerElements to v9s8

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373635 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:50:29 +00:00
James Molloy 9f29eb70dc [ModuloSchedule] removeBranch() *before* creating the trip count condition
The Hexagon code assumes there's no existing terminator when inserting its
trip count condition check.

This causes swp-stages5.ll to break. The generated code looks good to me,
it is likely a permutation. I have disabled the new codegen path to keep
everything green and will investigate along with the other 3-4 tests
that have different codegen.

Fixes expensive-checks build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373629 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 17:10:32 +00:00
Yonghong Song b45f56658d [BPF] Handle offset reloc endpoint ending in the middle of chain properly
During studying support for bitfield, I found an issue for
an example like the one in test offset-reloc-middle-chain.ll.
  struct t1 { int c; };
  struct s1 { struct t1 b; };
  struct r1 { struct s1 a; };
  #define _(x) __builtin_preserve_access_index(x)
  void test1(void *p1, void *p2, void *p3);
  void test(struct r1 *arg) {
    struct s1 *ps = _(&arg->a);
    struct t1 *pt = _(&arg->a.b);
    int *pi = _(&arg->a.b.c);
    test1(ps, pt, pi);
  }

The IR looks like:
  %0 = llvm.preserve.struct.access(base, ...)
  %1 = llvm.preserve.struct.access(%0, ...)
  %2 = llvm.preserve.struct.access(%1, ...)
  using %0, %1 and %2

In this case, we need to generate three relocatiions
corresponding to chains: (%0), (%0, %1) and (%0, %1, %2).
After collecting all the chains, the current implementation
process each chain (in a map) with code generation sequentially.
For example, after (%0) is processed, the code may look like:
  %0 = base + special_global_variable
  // llvm.preserve.struct.access(base, ...) is delisted
  // from the instruction stream.
  %1 = llvm.preserve.struct.access(%0, ...)
  %2 = llvm.preserve.struct.access(%1, ...)
  using %0, %1 and %2

When processing chain (%0, %1), the current implementation
tries to visit intrinsic llvm.preserve.struct.access(base, ...)
to get some of its properties and this caused segfault.

This patch fixed the issue by remembering all necessary
information (kind, metadata, access_index, base) during
analysis phase, so in code generation phase there is
no need to examine the intrinsic call instructions.
This also simplifies the code.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373621 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 16:30:29 +00:00
Sanjay Patel 31aa362969 [MSP430] add tests for unwanted shift codegen; NFC (PR43542)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373607 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 14:54:03 +00:00
Simon Atanasyan 329896719f [mips] Use llvm-readobj -A flag in test cases. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373589 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 12:08:04 +00:00
Sander de Smalen 3e9f78170e [AArch64] Static (de)allocation of SVE stack objects.
Adds support to AArch64FrameLowering to allocate fixed-stack SVE objects.

The focus of this patch is purely to allow the stack frame to
allocate/deallocate space for scalable SVE objects. More dynamic
allocation (at compile-time, i.e. determining placement of SVE objects
on the stack), or resolving frame-index references that include
scalable-sized offsets, are left for subsequent patches.

SVE objects are allocated in the stack frame as a separate region below
the callee-save area, and above the alignment gap. This is done so that
the SVE objects can be accessed directly from the FP at (runtime)
VL-based offsets to benefit from using the VL-scaled addressing modes.

The layout looks as follows:

     +-------------+
     | stack arg   |   
     +-------------+
     | Callee Saves|
     |   X29, X30  |       (if available)
     |-------------| <- FP (if available)
     |     :       |   
     |  SVE area   |   
     |     :       |   
     +-------------+
     |/////////////| alignment gap.
     |     :       |   
     | Stack objs  |
     |     :       |   
     +-------------+ <- SP after call and frame-setup

SVE and non-SVE stack objects are distinguished using different
StackIDs. The offsets for objects with TargetStackID::SVEVector should be
interpreted as purely scalable offsets within their respective SVE region.

Reviewers: thegameg, rovka, t.p.northover, efriedma, rengolin, greened

Reviewed By: efriedma

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373585 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 11:33:50 +00:00
Craig Topper d698e4446a [X86] Add test case for v8i64->v8i8 truncate with avx512 and prefer-vector-width/min-legal-vector-width=256. NFC
With vpmovqb, we should be able to do better here until we get
AVX512VBMI on Cannonlake/Icelake.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373569 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 06:18:45 +00:00
Matt Arsenault 118db2620f AMDGPU/GlobalISel: Expand G_BITCAST legality
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373567 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 05:46:08 +00:00
Craig Topper a0905148d0 [X86] Add DAG combine to turn (bitcast (vbroadcast_load)) into just a vbroadcast_load if the scalar size is the same.
This improves broadcast load folding of i64 elements on 32-bit
targets where i64 isn't legal.

Previously we had to represent these as vXf64 vbroadcast_loads and
a bitcast to vXi64. But we didn't have any isel patterns
looking for that.

This also allows us to remove or simplify some isel patterns that
were looking for bitcasted vbroadcast_loads.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373566 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 05:30:02 +00:00
Craig Topper 1653d09ad3 [X86] Add broadcast load folding patterns to NoVLX VPMULLQ/VPMAXSQ/VPMAXUQ/VPMINSQ/VPMINUQ patterns.
More fixes for PR36191.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373560 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-03 03:16:27 +00:00