| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 210610
|
| |
|
|
| |
llvm-svn: 210606
|
| |
|
|
|
|
|
| |
This currently necessitates a TargetMachine for the TargetLowering
constructor and TLOF.
llvm-svn: 210605
|
| |
|
|
| |
llvm-svn: 210599
|
| |
|
|
| |
llvm-svn: 210598
|
| |
|
|
| |
llvm-svn: 210596
|
| |
|
|
|
|
| |
using the subtarget.
llvm-svn: 210595
|
| |
|
|
|
|
| |
of using the cached TargetMachine.
llvm-svn: 210589
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I can't get VGPR spilling to work reliable, so for now just emit
an error when the register allocator tries to spill VGPRs.
v2:
- Fix build
v3:
- Added crash fix when spilling SPGRs
v4:
- Use V_MOV_B32 as a dummy instruction instead of S_NOP
Patch by: Darren Powell
https://bugs.freedesktop.org/show_bug.cgi?id=75276
llvm-svn: 210588
|
| |
|
|
|
|
|
|
|
|
|
| |
We need to make sure only one new instruction is added when spilling
otherwise the register allocator may crash.
This fixes a crash in the game Antichamber.
https://bugs.freedesktop.org/show_bug.cgi?id=75276
llvm-svn: 210587
|
| |
|
|
| |
llvm-svn: 210569
|
| |
|
|
| |
llvm-svn: 210568
|
| |
|
|
| |
llvm-svn: 210567
|
| |
|
|
| |
llvm-svn: 210564
|
| |
|
|
| |
llvm-svn: 210563
|
| |
|
|
| |
llvm-svn: 210559
|
| |
|
|
| |
llvm-svn: 210557
|
| |
|
|
|
|
| |
of the DataLayout.
llvm-svn: 210555
|
| |
|
|
|
|
| |
than a TargetMachine.
llvm-svn: 210554
|
| |
|
|
| |
llvm-svn: 210553
|
| |
|
|
| |
llvm-svn: 210552
|
| |
|
|
| |
llvm-svn: 210549
|
| |
|
|
|
|
| |
AArch64FrameLowering.
llvm-svn: 210548
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Implement materialize of floating point literals in Mips Fast-Isel
Reopened version of D3659
Test Plan: simplestorefp1.ll
Reviewers: dsanders
Reviewed By: dsanders
Differential Revision: http://reviews.llvm.org/D4071
llvm-svn: 210546
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch slightly changes the algorithm introduced at revision 210477
to fix a problem where the algorithm was producing incorrect code for
the VEX.256 encoded versions of horizontal add/sub.
For these cases, we now try to split the two 256-bit vectors into
128-bit chunks before emitting horizontal add/sub dag nodes.
Added a new test case into haddsub-2.ll.
llvm-svn: 210545
|
| |
|
|
|
|
|
|
| |
il is legal for Hexagon, so I should have marked this as Expand for
SELECT_CC when I removed setOperationAction(ISD::SELECT_CC, MVT::Other,
Expand); in r210541.
llvm-svn: 210544
|
| |
|
|
|
|
| |
Along with the corresponding intrinsic and tests.
llvm-svn: 210543
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, the basic block was searched for future uses of the base register,
and if necessary any writeback to the base register was reset using a SUB
instruction (e.g. before calling a function) just before such a use. However,
this step happened *before* the merged LDM/STM instruction was built. So if
there was (e.g.) a function call directly after the not-yet-formed LDM/STM,
the pass would first insert a SUB instruction to reset the base register,
and then (at the same location, incorrectly) insert the LDM/STM itself.
This patch fixes PR19972. Patch by Moritz Roth.
llvm-svn: 210542
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The SelectionDAG bad a special case for ISD::SELECT_CC, where it would
allow targets to specify:
setOperationAction(ISD::SELECT_CC, MVT::Other, Expand);
to indicate that they wanted to expand ISD::SELECT_CC for all types.
This wasn't applied correctly everywhere, and it makes writing new
DAG patterns with ISD::SELECT_CC difficult.
llvm-svn: 210541
|
| |
|
|
|
|
|
|
| |
This consolidates code from the Hexagon, R600, and XCore targets.
No functionality change intended.
llvm-svn: 210539
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Various masks on shufflevector instructions are recognizable as
specific PowerPC instructions (vector pack, vector merge, etc.).
There is existing code in PPCISelLowering.cpp to recognize the correct
patterns for big endian code. The masks for these instructions are
different for little endian code due to the big-endian numbering
employed by these instructions. This patch adds the recognition code
for little endian.
I've added a new test case test/CodeGen/PowerPC/vec_shuffle_le.ll for
this. The existing recognizer test (vec_shuffle.ll) is unnecessarily
verbose and difficult to read, so I felt it was better to add a new
test rather than modify the old one.
llvm-svn: 210536
|
| |
|
|
|
|
| |
Patch by Ana Pazos<apazos@codeaurora.org>!
llvm-svn: 210535
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
inverted condition codes (CINC, CINV, CNEG, CSET, and CSETM).
Matching aliases based on "immediate classes", when disassembling,
wasn't previously supported, hence adding MCOperandPredicate
into class Operand, and implementing the support for it
in AsmWriterEmitter.
The parsing for those aliases was already custom, so just adding
the missing condition into AArch64AsmParser::parseCondCode.
llvm-svn: 210528
|
| |
|
|
|
|
|
|
| |
As Ana Pazos pointed out, these have to be restored to their incoming values
before a function returns; i.e. before the tail call. So they can't be used
correctly as the destination register.
llvm-svn: 210525
|
| |
|
|
|
|
|
| |
This reverts commit r210523. It was committed prematurely without waiting for
review.
llvm-svn: 210524
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The C++ and C semantics of the compare_and_swap operations actually
require us to return a boolean "success" value. In LLVM terms this
means a second comparison of the output of "cmpxchg" against the input
desired value.
However, x86's "cmpxchg" instruction sets all flags for the comparison
formed, so we can skip any secondary comparison. (N.b. this isn't true
for cmpxchg8b/16b, which only set ZF).
rdar://problem/13201607
llvm-svn: 210523
|
| |
|
|
|
|
|
|
|
|
| |
Previously we were abandonning the attempt, leading to some combination of
extra work (when selection of a load/store fails completely) and inferior code
(when this leads to a real memcpy call instead of inlining).
rdar://problem/17187463
llvm-svn: 210520
|
| |
|
|
|
|
|
|
|
|
| |
We were hitting an assert if FastISel couldn't create the load or store we
requested. Currently this happens for large frame-local addresses, though
CodeGen could be improved there.
rdar://problem/17187463
llvm-svn: 210519
|
| |
|
|
| |
llvm-svn: 210516
|
| |
|
|
|
|
|
|
|
|
|
| |
large types (i64 and above).
This improves the X86 cost model for small constants with large types. Before
this commit we would even hoist trivial constants such as i96 2.
This is related to <rdar://problem/17070936>
llvm-svn: 210504
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The code in PPCTargetLowering::PerformDAGCombine() that handles
unaligned Altivec vector loads generates a lvsl followed by a vperm.
As we've seen in numerous other places, the vperm instruction has a
big-endian bias, and this is fixed for little endian by complementing
the permute control vector and swapping the input operands. In this
case the lvsl is providing the permute control vector. Rather than
generating an lvsl and a complement operation, it is sufficient to
generate an lvsr instruction instead. Thus for LE code generation we
will generate an lvsr rather than an lvsl, and swap the other input
arguments on the vperm.
The existing test/CodeGen/PowerPC/vec_misalign.ll is updated to test
the code generation for PPC64 and PPC64LE, in addition to the existing
PPC32/G5 testing.
llvm-svn: 210493
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The armv7-windows-itanium environment is nearly identical to the MSVC ABI. It
has a few divergences, mostly revolving around the use of the Itanium ABI for
C++. VLA support is one of the extensions that are amongst the set of the
extensions.
This adds support for proper VLA emission for this environment. This is
somewhat similar to the handling for __chkstk emission on X86 and the large
stack frame emission for ARM. The invocation style for chkstk is still
controlled via the -mcmodel flag to clang.
Make an explicit note that this is an extension.
llvm-svn: 210489
|
| |
|
|
|
|
| |
from the x86 target machine. Should be no functional change.
llvm-svn: 210479
|
| |
|
|
|
|
| |
It has other uses besides shift instructions.
llvm-svn: 210478
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds new target specific combine rules to identify horizontal
add/sub idioms from BUILD_VECTOR dag nodes.
This patch also teaches the DAGCombiner how to canonicalize sequences of
insert_vector_elt dag nodes according to the following rule:
(insert_vector_elt (insert_vector_elt A, I0), I1) ->
(insert_vecto_elt (insert_vector_elt A, I1), I0)
This new canonicalization rule only triggers if the inner insert_vector
dag node has exactly one use; also, both indices must be known constants,
and I1 < I0.
This last rule made it possible to write a simpler algorithm to identify
horizontal add/sub patterns because now we don't have to worry about the
ordering of insert_vector_elt dag nodes.
llvm-svn: 210477
|
| |
|
|
| |
llvm-svn: 210476
|
| |
|
|
| |
llvm-svn: 210475
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The existing code in PPCTargetLowering::LowerMUL() for multiplying two
v16i8 values assumes that vector elements are numbered in big-endian
order. For little-endian targets, the vector element numbering is
reversed, but the vmuleub, vmuloub, and vperm instructions still
assume big-endian numbering. To account for this, we must adjust the
permute control vector and reverse the order of the input registers on
the vperm instruction.
The existing test/CodeGen/PowerPC/vec_mul.ll is updated to be executed
on powerpc64 and powerpc64le targets as well as the original powerpc
(32-bit) target.
llvm-svn: 210474
|
| |
|
|
|
|
|
|
| |
load/store is in branch delay slot.
Differential Revision: http://llvm-reviews.chandlerc.com/D4048
llvm-svn: 210470
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This patch teaches the backend how to check for the 'NoSignedWrap' flag on
binary operations to improve the emission of 'test' instructions.
If the result of a binary operation is known not to overflow we know that
resetting the Overflow flag is unnecessary and so we can avoid emitting
the test instruction.
Patch by Marcello Maggioni.
llvm-svn: 210468
|