| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Second part of https://reviews.llvm.org/D40348.
Revision r318436 has extended all constants feeding a store to 64 bits
to allow for CSE on the SDAG. However, negative constants were zero extended
which made the constant being loaded appear to be a positive value larger than
16 bits. This resulted in long sequences to materialize such constants
rather than simply a "load immediate". This patch just sign-extends those
updated constants so that they remain 16-bit signed immediates if they started
out that way.
llvm-svn: 320368
|
| |
|
|
|
|
|
|
|
|
| |
This commit is the first part of https://reviews.llvm.org/D40348.
In order to allow target combines to be performed on newly combined
indexed loads, add them back to the worklist. The remainder of the
above patch will be committed in subsequent revisions and will use
this. Test cases will be included with those follow-up commits.
llvm-svn: 320365
|
| |
|
|
|
|
| |
Add test for matching an OR with 0xFFFF0000 to a MOVTi16.
llvm-svn: 320362
|
| |
|
|
| |
llvm-svn: 320361
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The TableGen-based calling convention definitions are inflexible, while
writing a function to implement the calling convention is very
straight-forward, and allows difficult cases to be handled more easily. With
this patch adds support for:
* Passing large scalars according to the RV32I calling convention
* Byval arguments
* Passing values on the stack when the argument registers are exhausted
The custom CC_RISCV calling convention is also used for returns.
This patch also documents the ABI lowering that a language frontend is
expected to perform. I would like to work to simplify these requirements over
time, but this will require further discussion within the LLVM community.
We add PendingArgFlags CCState, as a companion to PendingLocs.
The PendingLocs vector is used by a number of backends to handle arguments
that are split during legalisation. However CCValAssign doesn't keep track of
the original argument alignment. Therefore, add a PendingArgFlags vector which
can be used to keep track of the ISD::ArgFlagsTy for every value added to
PendingLocs.
Differential Revision: https://reviews.llvm.org/D39898
llvm-svn: 320359
|
| |
|
|
| |
llvm-svn: 320358
|
| |
|
|
|
|
|
|
|
|
| |
As frame pointer elimination isn't implemented until a later patch and we make
extensive use of update_llc_test_checks.py, this changes touches a lot of the
RISC-V tests.
Differential Revision: https://reviews.llvm.org/D39849
llvm-svn: 320357
|
| |
|
|
| |
llvm-svn: 320356
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a preparatory step for D34515.
This change:
- makes nodes ISD::ADDCARRY and ISD::SUBCARRY legal for i32
- lowering is done by first converting the boolean value into the carry flag
using (_, C) ← (ARMISD::ADDC R, -1) and converted back to an integer value
using (R, _) ← (ARMISD::ADDE 0, 0, C). An ARMISD::ADDE between the two
operations does the actual addition.
- for subtraction, given that ISD::SUBCARRY second result is actually a
borrow, we need to invert the value of the second operand and result before
and after using ARMISD::SUBE. We need to invert the carry result of
ARMISD::SUBE to preserve the semantics.
- given that the generic combiner may lower ISD::ADDCARRY and
ISD::SUBCARRYinto ISD::UADDO and ISD::USUBO we need to update their lowering
as well otherwise i64 operations now would require branches. This implies
updating the corresponding test for unsigned.
- add new combiner to remove the redundant conversions from/to carry flags
to/from boolean values (ARMISD::ADDC (ARMISD::ADDE 0, 0, C), -1) → C
- fixes PR34045
- fixes PR34564
- fixes PR35103
Differential Revision: https://reviews.llvm.org/D35192
llvm-svn: 320355
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Introduces the AddrFI "addressing mode", which is necessary simply because
it's not possible to write a pattern that directly matches a frameindex.
Ensure callee-saved registers are accessed relative to the stackpointer. This
is necessary as callee-saved register spills are performed before the frame
pointer is set.
Move HexagonDAGToDAGISel::isOrEquivalentToAdd to SelectionDAGISel, so we can
make use of it in the RISC-V backend.
Differential Revision: https://reviews.llvm.org/D39848
llvm-svn: 320353
|
| |
|
|
|
|
|
|
| |
Test (some of) the patterns for selecting PKHBT and PKHTB. The others
are just very similar to the ones we're testing and there would be
little value in covering them as well.
llvm-svn: 320352
|
| |
|
|
|
|
|
|
|
|
|
| |
All files and parts of files related to microMIPS4R6 are removed.
When target is microMIPS4R6, errors are printed.
This is LLVM part of patch.
Differential Revision: https://reviews.llvm.org/D35625
llvm-svn: 320350
|
| |
|
|
|
|
| |
This has been broken since r320009.
llvm-svn: 320348
|
| |
|
|
|
|
| |
This has been broken since r320009.
llvm-svn: 320347
|
| |
|
|
|
|
| |
We should probably also fold (mulhs/u X, 1) for vectors, but that's harder.
llvm-svn: 320344
|
| |
|
|
| |
llvm-svn: 320343
|
| |
|
|
| |
llvm-svn: 320342
|
| |
|
|
|
|
| |
legalized from v2i32 while other types are legal.
llvm-svn: 320340
|
| |
|
|
| |
llvm-svn: 320334
|
| |
|
|
| |
llvm-svn: 320333
|
| |
|
|
|
|
| |
Include i686 (non-REX) variant tests as well
llvm-svn: 320332
|
| |
|
|
| |
llvm-svn: 320331
|
| |
|
|
| |
llvm-svn: 320330
|
| |
|
|
| |
llvm-svn: 320329
|
| |
|
|
| |
llvm-svn: 320328
|
| |
|
|
|
|
| |
skylake server sheduler model
llvm-svn: 320326
|
| |
|
|
|
|
|
|
| |
This matches AVX512 version and is more consistent overall. And improves our scheduler models.
In some cases this adds _Int to instructions that didn't have any Int_ before. It's a side effect of the adjustments made to some of the multiclasses.
llvm-svn: 320325
|
| |
|
|
| |
llvm-svn: 320322
|
| |
|
|
|
|
| |
Split off some 'n' instruction versions to make it clearer when WAIT is being inserted
llvm-svn: 320321
|
| |
|
|
|
|
|
|
| |
suffix. Fix the scheduling information for some of them.
Some of the scheduling information was only present for the 'rb' version' and not the 'rr' version. Now we match 'rr(b?)'
llvm-svn: 320320
|
| |
|
|
| |
llvm-svn: 320319
|
| |
|
|
| |
llvm-svn: 320318
|
| |
|
|
|
|
| |
model.
llvm-svn: 320317
|
| |
|
|
|
|
| |
This makes things consistent with our normal instruction naming.
llvm-svn: 320316
|
| |
|
|
| |
llvm-svn: 320315
|
| |
|
|
| |
llvm-svn: 320314
|
| |
|
|
|
|
|
|
| |
models instead of just instregexs.
This separates the CPU specific scheduler model includes to occur after the instructions. Moves the instruction includes between the basic scheduler information and the CPU specific scheduler models.
llvm-svn: 320313
|
| |
|
|
|
|
|
| |
Follow-up for a bug that's similar to:
https://bugs.llvm.org/show_bug.cgi?id=35601
llvm-svn: 320312
|
| |
|
|
| |
llvm-svn: 320311
|
| |
|
|
|
|
|
| |
This should fix the larger problem with sqrt shown in:
https://bugs.llvm.org/show_bug.cgi?id=35601
llvm-svn: 320310
|
| |
|
|
| |
llvm-svn: 320309
|
| |
|
|
|
|
| |
Locally tag COPY as WriteMove, which has caused some reg-reg + reg-mem instruction tests to reorder.
llvm-svn: 320308
|
| |
|
|
| |
llvm-svn: 320307
|
| |
|
|
| |
llvm-svn: 320306
|
| |
|
|
| |
llvm-svn: 320305
|
| |
|
|
|
|
| |
We just have to locally tag COPY as WriteMove
llvm-svn: 320304
|
| |
|
|
|
|
| |
We just have to locally tag COPY as WriteMove
llvm-svn: 320303
|
| |
|
|
| |
llvm-svn: 320302
|
| |
|
|
| |
llvm-svn: 320301
|
| |
|
|
|
|
| |
We just have to locally tag COPY as WriteMove
llvm-svn: 320300
|