| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
| |
Zext from s1 is the only case where this should do anything with the
current legal extensions.
llvm-svn: 364760
|
| |
|
|
| |
llvm-svn: 364757
|
| |
|
|
| |
llvm-svn: 364756
|
| |
|
|
| |
llvm-svn: 364755
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
isLoopExiting should only be called for blocks in the loop. A follow
up patch makes this requirement an assertion.
I've updated the usage here, to only match for actual exit blocks. Previously,
it would also match blocks not in the loop.
Reviewers: arsenm, nhaehnle
Reviewed By: nhaehnle
Differential Revision: https://reviews.llvm.org/D63980
llvm-svn: 364750
|
| |
|
|
|
|
| |
As suggested by jrtc27 in the post-commit review of D60528.
llvm-svn: 364746
|
| |
|
|
|
|
| |
CombineShuffleWithExtract no longer requires that both shuffle ops are extract_subvectors, from the same type or from the same size.
llvm-svn: 364745
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Backend changes to enable WLS/LE low-overhead loops for armv8.1-m:
1) Use TTI to communicate to the HardwareLoop pass that we should try
to generate intrinsics that guard the loop entry, as well as setting
the loop trip count.
2) Lower the BRCOND that uses said intrinsic to an Arm specific node:
ARMWLS.
3) ISelDAGToDAG the node to a new pseudo instruction:
t2WhileLoopStart.
4) Add support in ArmLowOverheadLoops to handle the new pseudo
instruction.
Differential Revision: https://reviews.llvm.org/D63816
llvm-svn: 364733
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We had a bunch of vector size legality checks for the source type
based on feature flags, but we didn't check the destination type at
all beyond ensuring that it was a "simple" type. But this allowed
the destination to be i128 which isn't legal.
This commit changes the code to use TLI's isTypeLegal logic in
place of the all the subtarget checks. Then additionally checks
that the source and dest are vectors.
Fixes 42452
llvm-svn: 364729
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
CVTSI2FP/CVTUI2FP node with a vzload.
But only when the load isn't volatile.
This improves load folding during isel where we only have vzload
and scalar_to_vector+load patterns. We can't have full vector load
isel patterns for the same volatile load issue.
Also add some missing masked cvtsi2fp/cvtui2fp with vzload patterns.
llvm-svn: 364728
|
| |
|
|
|
|
|
|
|
| |
We already had patterns that used scalar_to_vector+load. But we can
also have a vzload.
Found while investigating combining scalar_to_vector+load to vzload.
llvm-svn: 364726
|
| |
|
|
| |
llvm-svn: 364720
|
| |
|
|
|
|
|
|
|
|
|
|
| |
selecting a maskmov+vblend during isel.
AVX masked loads only support 0 as the value for masked off elements.
So we need an extra blend to support other values. Previously we
expanded the masked load to two instructions with isel patterns.
With this patch we now insert the vselect during lowering and it
will be separately selected as a blend.
llvm-svn: 364718
|
| |
|
|
| |
llvm-svn: 364701
|
| |
|
|
| |
llvm-svn: 364699
|
| |
|
|
| |
llvm-svn: 364698
|
| |
|
|
| |
llvm-svn: 364697
|
| |
|
|
| |
llvm-svn: 364696
|
| |
|
|
| |
llvm-svn: 364695
|
| |
|
|
| |
llvm-svn: 364694
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: sbc100
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63959
llvm-svn: 364689
|
| |
|
|
|
|
|
| |
The cmov node used to sometimes return a glue result (and that's what
'flag' meant in this context), but that was removed with D38664.
llvm-svn: 364687
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: sbc100
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63951
llvm-svn: 364682
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Reviewers: sbc100
Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63947
llvm-svn: 364681
|
| |
|
|
|
|
| |
This matches the default settings of clang.
llvm-svn: 364675
|
| |
|
|
| |
llvm-svn: 364667
|
| |
|
|
| |
llvm-svn: 364656
|
| |
|
|
|
|
|
|
|
|
|
|
| |
MVE adds the lsll, lsrl and asrl instructions, which perform a shift on a 64 bit value separated into two 32 bit registers.
The Expand64BitShift function is modified to accept ISD::SHL, ISD::SRL and ISD::SRA and convert it into the appropriate opcode in ARMISD. An SHL is converted into an lsll, an SRL is converted into an lsrl for the immediate form and a negation and lsll for the register form, and SRA is converted into an asrl.
test/CodeGen/ARM/shift_parts.ll is added to test the logic of emitting these instructions.
Differential Revision: https://reviews.llvm.org/D63430
llvm-svn: 364654
|
| |
|
|
| |
llvm-svn: 364651
|
| |
|
|
|
|
|
|
|
|
| |
See bug 40820: https://bugs.llvm.org/show_bug.cgi?id=40820
Reviewers: artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D62735
llvm-svn: 364645
|
| |
|
|
|
|
|
|
| |
We were requiring that both shuffle operands were EXTRACT_SUBVECTORs, but we can relax this to only require one of them to be.
Also, we shouldn't bother attempting this if both operands are from the lowest subvector (or not EXTRACT_SUBVECTOR at all).
llvm-svn: 364644
|
| |
|
|
|
|
|
|
|
| |
This simply adds integer and floating point VMUL patterns for MVE, same as we
have add and sub.
Differential Revision: https://reviews.llvm.org/D63866
llvm-svn: 364643
|
| |
|
|
|
|
|
|
|
| |
This adds handling and tests for a number of floating point math routines,
which have no MVE instructions.
Differential Revision: https://reviews.llvm.org/D63725
llvm-svn: 364641
|
| |
|
|
|
|
|
|
| |
This simply adds the required patterns for fp neg and abs.
Differential Revision: https://reviews.llvm.org/D63861
llvm-svn: 364640
|
| |
|
|
|
|
|
|
|
|
|
|
| |
MVE has instructions to widen as it loads, and narrow as it stores. This adds
the required patterns and legalisation to make them work including specifying
that they are legal, patterns to select them and test changes.
Patch by David Sherwood.
Differential Revision: https://reviews.llvm.org/D63839
llvm-svn: 364636
|
| |
|
|
| |
llvm-svn: 364635
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fills in the gaps for basic MVE loads and stores, allowing unaligned
access and adding far too many tests. These will become important as
narrowing/expanding and pre/post inc are added. Big endian might still not be
handled very well, because we have not yet added bitcasts (and I'm not sure how
we want it to work yet). I've included the alignment code anyway which maps
with our current patterns. We plan to return to that later.
Code written by Simon Tatham, with additional tests from Me and Mikhail Maltsev.
Differential Revision: https://reviews.llvm.org/D63838
llvm-svn: 364633
|
| |
|
|
|
|
| |
c.f. r364349
llvm-svn: 364632
|
| |
|
|
|
|
|
|
|
| |
We don't have vector operations for these, so they need to be expanded for both
integer and float.
Differential Revision: https://reviews.llvm.org/D63595
llvm-svn: 364631
|
| |
|
|
|
|
|
|
|
|
|
| |
The same as integer arithmetic, we can add simple floating point MVE addition and
subtraction patterns.
Initial code by David Sherwood
Differential Revision: https://reviews.llvm.org/D63257
llvm-svn: 364629
|
| |
|
|
|
|
|
|
|
|
|
| |
This adds the first few patterns for MVE code generation, adding simple integer
add and sub patterns.
Initial code by David Sherwood
Differential Revision: https://reviews.llvm.org/D63255
llvm-svn: 364627
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds necessary shuffle vector and buildvector support for ARM MVE.
It essentially adds support for VDUP, VREVs and some VMOVs, which are often
required by other code (like upcoming patches).
This mostly uses the same code from Neon that already generated
NEONvdup/NEONvduplane/NEONvrev's. These have been renamed to ARMvdup/etc and
moved to ARMInstrInfo as they are common to both architectures. Most of the
selection code seems to be applicable to both, but NEON does have some more
instructions making some parts specific.
Most code originally by David Sherwood.
Differential Revision: https://reviews.llvm.org/D63567
llvm-svn: 364626
|
| |
|
|
|
|
| |
vzext_load.
llvm-svn: 364625
|
| |
|
|
|
|
| |
instruction definition. NFC
llvm-svn: 364623
|
| |
|
|
|
|
| |
position of td file
llvm-svn: 364620
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D63851
llvm-svn: 364619
|
| |
|
|
| |
llvm-svn: 364617
|
| |
|
|
| |
llvm-svn: 364616
|
| |
|
|
| |
llvm-svn: 364585
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
FeatureFusion bits was first introduced in
https://reviews.llvm.org/rL253724. for add/load integer fusion for P8.
The only use of `hasFusion` was https://reviews.llvm.org/rL255319.
However, this was removed later in https://reviews.llvm.org/rL280440.
So, there is NO any reference to fusion in code now.
Leaving it there is misleading and confusing, so remove it for now.
We can alwasy add back if we ever support fusion in the future.
llvm-svn: 364581
|