| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 283050
|
| |
|
|
| |
llvm-svn: 283041
|
| |
|
|
|
|
| |
We already had support for 1-input BLEND with zero - this adds support for 2-input BLEND as well.
llvm-svn: 283040
|
| |
|
|
|
|
|
|
| |
Now we can commute to BLENDPD/BLENDPS on SSE41+ targets if necessary, so simplify the combine matching where we can.
This required me to add a couple of scalar math movsd/moss fold patterns that hadn't been needed in the past.
llvm-svn: 283038
|
| |
|
|
|
|
|
|
|
|
|
|
| |
targets
Instead of selecting between MOVSD/MOVSS and BLENDPD/BLENDPS at shuffle lowering by subtarget this will help us select the instruction based on actual commutation requirements.
We could possibly add BLENDPD/BLENDPS -> MOVSD/MOVSS commutation and MOVSD/MOVSS memory folding using a similar approach if it proves useful
I avoided adding AVX512 handling as I'm not sure when we should be making use of VBLENDPD/VBLENDPS on EVEX targets
llvm-svn: 283037
|
| |
|
|
|
|
|
|
| |
-Remove OptForSize. Not all of the backend follows the same rules for creating broadcasts and there is no conflicting pattern.
-Don't stop selecting VEX VMOVDDUP when AVX512 is supported. We need VLX for EVEX VMOVDDUP.
-Only use VMOVDDUP for v2i64 broadcasts if AVX2 is not supported.
llvm-svn: 283020
|
| |
|
|
|
|
| |
This reverts commit r283017. Creates an infinite loop somehow.
llvm-svn: 283019
|
| |
|
|
| |
llvm-svn: 283018
|
| |
|
|
| |
llvm-svn: 283017
|
| |
|
|
| |
llvm-svn: 283015
|
| |
|
|
| |
llvm-svn: 283013
|
| |
|
|
|
|
| |
This reverts commit r283009. Bots are broken.
llvm-svn: 283011
|
| |
|
|
| |
llvm-svn: 283009
|
| |
|
|
| |
llvm-svn: 283004
|
| |
|
|
|
|
|
| |
This reverts commit r282999.
Tests are not passing: http://lab.llvm.org:8011/builders/clang-x86_64-linux-selfhost-modules/builds/20038
llvm-svn: 283003
|
| |
|
|
|
|
| |
and can be pulled from the TargetMachine. NFC.
llvm-svn: 283000
|
| |
|
|
|
|
| |
This removes many re-initializations of a base register to 0.
llvm-svn: 282999
|
| |
|
|
|
|
|
|
| |
This makes sure the helper functions work as expected.
NFC.
llvm-svn: 282961
|
| |
|
|
|
|
|
|
| |
We don't return index, we return the actual ValueMapping.
NFC.
llvm-svn: 282960
|
| |
|
|
|
|
|
|
|
|
| |
We don't need to have singleton ValueMapping on their own, we can just
reuse one of the elements of the 3-ops mapping.
This allows even more code sharing.
NFC.
llvm-svn: 282959
|
| |
|
|
|
|
|
|
|
| |
Use a helper function to access ValMapping. This should make the code
easier to understand and maintain.
NFC.
llvm-svn: 282958
|
| |
|
|
|
|
|
|
|
| |
The function name did not make it clear that the returned value was an
offset to apply to a register bank index.
NFC.
llvm-svn: 282957
|
| |
|
|
|
|
|
|
| |
Avoid to rely on the dynamically allocated operands mapping for the
alternative mapping.
NFC.
llvm-svn: 282956
|
| |
|
|
|
|
|
|
|
|
|
| |
We can't use Jcc to leave a Win64 function in general, because that
confuses the unwinder. However, for "leaf" functions, that is, functions
where the return address is always on top of the stack and which don't
have unwind info, it's OK.
Differential Revision: https://reviews.llvm.org/D24836
llvm-svn: 282920
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Register stackification currently checks VNInfo for changes. Make that
more accurate by testing each intervening instruction for any other defs
to the same virtual register.
Patch by Jacob Gravelle
Differential Revision: https://reviews.llvm.org/D24942
llvm-svn: 282886
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D24973
llvm-svn: 282877
|
| |
|
|
|
|
|
|
| |
instruction
Differential Revision: https://reviews.llvm.org/D24985
llvm-svn: 282875
|
| |
|
|
|
|
| |
Differential Revision: https://reviews.llvm.org/D25055
llvm-svn: 282873
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Summary: This adds the ELF32 writer for AVR.
Reviewers: kparzysz
Subscribers: beanz, mgorny
Differential Revision: https://reviews.llvm.org/D25031
llvm-svn: 282856
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
This change adds the AVR assembly instruction printer.
No tests are included in this patch. I have left them downstream so we can
add them once `llc` successfully runs (there's very few components left
to upstream until this).
Reviewers: arsenm, kparzysz
Subscribers: wdng, beanz, mgorny
Differential Revision: https://reviews.llvm.org/D25028
llvm-svn: 282854
|
| |
|
|
|
|
| |
stack spilling pseudos for XMM16-31 and YMM16-31 without VLX.
llvm-svn: 282843
|
| |
|
|
|
|
| |
without VLX to teh isFrameLoadOpcode and isFrameStoreOpcode.
llvm-svn: 282842
|
| |
|
|
|
|
|
|
| |
addRegisterClass regardless of whether AVX512/VLX is enabled or not."
Turns out this doesn't pass verify-machineinstrs.
llvm-svn: 282841
|
| |
|
|
|
|
|
|
| |
also missing. Change register class to include the extra 16 AVX512 registers.
I'm not completely sure what this method does or why all the 256-bit VTs returned VR128RegClass when the comments on the method definiton say it should return the largest super register class. I just figured AVX-512 should be similar.
llvm-svn: 282836
|
| |
|
|
|
|
|
|
|
|
| |
addRegisterClass regardless of whether AVX512/VLX is enabled or not.
If AVX512 is disabled, the registers should already be marked reserved. Pattern predicates and register classes on instructions should take care of most of the rest. Loads/stores and physical register copies for XMM16-31 and YMM16-31 without VLX have already been taken care of.
I'm a little unclear why this changed the register allocation of the SSE2 run of the sad.ll test, but the registers selected appear to be valid after this change.
llvm-svn: 282835
|
| |
|
|
|
|
|
|
|
|
| |
For some reason there are both of these available, except
for scalar 64-bit compares which only has u64. I'm not sure
why there are both (I'm guessing it's for the one bit inputs we
don't use), but for consistency always using the
unsigned one.
llvm-svn: 282832
|
| |
|
|
|
|
|
|
|
| |
Code that doesn't use floating point and doesn't use SSE (kernel code)
shouldn't save and restore SSE registers.
Fixes PR30503
llvm-svn: 282819
|
| |
|
|
|
|
|
|
| |
This uses a TableGen'ed like structure for all 3-operands instrs.
The output of the RegBankSelect pass should be identical but the
RegisterBankInfo will do less dynamic allocations.
llvm-svn: 282817
|
| |
|
|
|
|
|
| |
This is the kind of input TableGen should generate at some point.
NFC.
llvm-svn: 282816
|
| |
|
|
|
|
|
|
|
| |
Make sure that the ValueMappings contain the value we expect at the
indices we expect.
NFC.
llvm-svn: 282815
|
| |
|
|
| |
llvm-svn: 282732
|
| |
|
|
|
|
|
|
|
|
| |
The shuffle mask decodes have a large amount of repeated code extracting/splitting mask values from Constant data.
This patch pulls all of this duplicated code into a single helper function to identify undef elements and combine/split constant integer data into the requested shuffle mask elements.
Updated PSHUFB/VPERMIL/VPERMIL2/VPPERM decoders to use it (VPERMV/VPERMV3 could be converted as well in the future).
llvm-svn: 282720
|
| |
|
|
|
|
| |
I accidentally comitted it.
llvm-svn: 282712
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Summary: This adds AVRISelLowering.cpp
Reviewers: kparzysz, arsenm
Subscribers: wdng, beanz, mgorny
Differential Revision: https://reviews.llvm.org/D25034
llvm-svn: 282711
|
| |
|
|
|
|
|
|
| |
This adds new pseudo instructions that can be selected during register allocation to represent loads and stores of XMM/YMM registers when AVX512F is available, but VLX isn't. They will be converted to VEX encoded moves if the register turns out to be XMM0-15/YMM0-15. Otherwise either an EVEX VEXTRACT(store) or VBROADCAST(load) will be used.
Fixes one of the cases from PR29112.
llvm-svn: 282690
|
| |
|
|
|
|
| |
(X86VBroadcast f64:)). Add AVX512VL to command line of existing AVX2 test that hits this condition.
llvm-svn: 282688
|
| |
|
|
|
|
| |
domain fixing table.
llvm-svn: 282687
|
| |
|
|
| |
llvm-svn: 282686
|
| |
|
|
| |
llvm-svn: 282684
|
| |
|
|
|
|
|
|
|
|
|
| |
AsmPrinter. This was reinitializing the Mangler after we moved the
Mangler down to TLOF and causing us to have two different unnamed
global values accessed with the same name.
This should fix the problems on the ubsan tests here:
http://lab.llvm.org:8011/builders/clang-cmake-mips/builds/15307
llvm-svn: 282675
|