| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
replacement of multiple values. This is slightly more efficient
than doing multiple ReplaceAllUsesOfValueWith calls, and theoretically
could be optimized even further. However, an important property of this
new function is that it handles the case where the source value set and
destination value set overlap. This makes it feasible for isel to use
SelectNodeTo in many very common cases, which is advantageous because
SelectNodeTo avoids a temporary node and it doesn't require CSEMap
updates for users of values that don't change position.
Revamp MorphNodeTo, which is what does all the work of SelectNodeTo, to
handle operand lists more efficiently, and to correctly handle a number
of corner cases to which its new wider use exposes it.
This commit also includes a change to the encoding of post-isel opcodes
in SDNodes; now instead of being sandwiched between the target-independent
pre-isel opcodes and the target-dependent pre-isel opcodes, post-isel
opcodes are now represented as negative values. This makes it possible
to test if an opcode is pre-isel or post-isel without having to know
the size of the current target's post-isel instruction set.
These changes speed up llc overall by 3% and reduce memory usage by 10%
on the InstructionCombining.cpp testcase with -fast and -regalloc=local.
llvm-svn: 53728
|
| |
|
|
|
|
|
| |
only missing ppc long double operations: FNEG
and FP_EXTEND.
llvm-svn: 53723
|
| |
|
|
|
|
|
| |
it is breaking Darwin bootstrap due to missing
functionality.
llvm-svn: 53721
|
| |
|
|
| |
llvm-svn: 53713
|
| |
|
|
|
|
|
| |
was turned up by some new SelectionDAG assertion checks that I'm
working on.
llvm-svn: 53687
|
| |
|
|
|
|
|
| |
and AssertSext. Needed when passing huge integer
parameters with the zeroext or signext attributes.
llvm-svn: 53684
|
| |
|
|
|
|
|
|
| |
While this is not a wonderful organizing principle, it
does make it easy to find routines, and clear where to
insert new ones.
llvm-svn: 53672
|
| |
|
|
| |
llvm-svn: 53671
|
| |
|
|
| |
llvm-svn: 53636
|
| |
|
|
|
|
|
| |
just use the AllNodes order, which is at least relatively stable
across runs.
llvm-svn: 53632
|
| |
|
|
| |
llvm-svn: 53613
|
| |
|
|
|
|
|
|
|
|
|
|
| |
In LegalizeDAG the value is zero-extended to
the new type before byte swapping. It doesn't
matter how the extension is done since the new
bits are shifted off anyway after the swap, so
extend by any old rubbish bits. This results
in the final assembler for the testcase being
one line shorter.
llvm-svn: 53604
|
| |
|
|
| |
llvm-svn: 53603
|
| |
|
|
|
|
| |
No change in functionality.
llvm-svn: 53602
|
| |
|
|
|
|
| |
alignment
llvm-svn: 53590
|
| |
|
|
|
|
|
| |
the BB member to the current basic block after emitting
instructions.
llvm-svn: 53567
|
| |
|
|
|
|
|
| |
don't have value names, so use print instead of getName() to get a
useful string.
llvm-svn: 53563
|
| |
|
|
|
|
| |
Remove support for this.
llvm-svn: 53559
|
| |
|
|
|
|
| |
non-power-of-two vectors.
llvm-svn: 53558
|
| |
|
|
|
|
|
|
| |
than the vector element type. Don't forget to
handle this when the insertion index is not a
constant.
llvm-svn: 53556
|
| |
|
|
|
|
|
|
|
|
| |
extending load of a vector. Handle this case when
splitting vector loads. I'm not completely sure
what is supposed to happen, but I think it means
hi should be set to undef. LegalizeDAG does not
consider this case.
llvm-svn: 53555
|
| |
|
|
|
|
|
|
| |
stores of one-element vectors. Also, neaten the
handling of INSERT_VECTOR_ELT when the inserted
type is larger than the vector element type.
llvm-svn: 53554
|
| |
|
|
|
|
|
|
|
|
| |
are used for passing huge immediates in inline ASM
from the front-end straight down to the ASM writer.
Of course this is a hack, but it is simple, limited
in scope, works in practice, and is what LegalizeDAG
does.
llvm-svn: 53553
|
| |
|
|
| |
llvm-svn: 53502
|
| |
|
|
|
|
|
| |
instead of using the frame index for the SVOffset, which was
inconsistent.
llvm-svn: 53486
|
| |
|
|
| |
llvm-svn: 53481
|
| |
|
|
| |
llvm-svn: 53480
|
| |
|
|
|
|
|
|
| |
use a timer group for the timers in SelectionDAGISel. Also,
Split scheduling out from emitting, to give each their own
timer.
llvm-svn: 53476
|
| |
|
|
| |
llvm-svn: 53471
|
| |
|
|
|
|
|
| |
be no need to split the result of a vector RET node,
since they are always already legal.
llvm-svn: 53462
|
| |
|
|
|
|
|
|
|
| |
SINT_TO_FP libcall plus additional operations:
it might as well be a direct UINT_TO_FP libcall.
So only turn it into an SINT_TO_FP if the target
has special handling for SINT_TO_FP.
llvm-svn: 53461
|
| |
|
|
| |
llvm-svn: 53460
|
| |
|
|
|
|
|
| |
was presumably added after the rest of the code was
copied to LegalizeTypes.
llvm-svn: 53459
|
| |
|
|
|
|
| |
on 16 bit machines.
llvm-svn: 53458
|
| |
|
|
|
|
|
| |
when working on legalizetypes. Both legalizetypes and legalizeops now
produce hte same code for CodeGen/ARM/fcopysign.ll.
llvm-svn: 53435
|
| |
|
|
| |
llvm-svn: 53434
|
| |
|
|
|
|
|
|
|
| |
Lack of these caused a bootstrap failure with Fortran
on x86-64 with LegalizeTypes turned on. While there,
be nice to 16 bit machines and support expansion of
i32 too.
llvm-svn: 53408
|
| |
|
|
|
|
|
| |
Be nice to 16 bit machines by supporting FP_TO_XINT
expansion for these.
llvm-svn: 53407
|
| |
|
|
| |
llvm-svn: 53406
|
| |
|
|
|
|
|
| |
was doing there: FP_ROUND returns a float, not an
integer.
llvm-svn: 53405
|
| |
|
|
|
|
|
| |
in CreateStackStoreLoad is good enough for both
the source and destination types.
llvm-svn: 53404
|
| |
|
|
| |
llvm-svn: 53403
|
| |
|
|
|
|
| |
a ginormous value (eg: i128 -1).
llvm-svn: 53402
|
| |
|
|
|
|
|
|
|
|
|
| |
makes their special-case checks of use_size() less beneficial,
so remove them. This eliminates all but one use of use_size(),
which is in AssignTopologicalOrder, which uses it only once for
each node, and so can reasonably afford to recompute it, as
this allows the UsesSize field of SDNode to be removed
altogether.
llvm-svn: 53377
|
| |
|
|
|
|
| |
of examining every operand of every user.
llvm-svn: 53374
|
| |
|
|
|
|
|
| |
getMemOperand function to be moved into the base class as well
and made non-virtual.
llvm-svn: 53372
|
| |
|
|
|
|
|
|
|
|
| |
class, and store IsVolatile and Alignment in a more compact form.
This makes AtomicSDNode slightly larger, but it shrinks LoadSDNode
and StoreSDNode, which are much more common and are the largest of
the SDNode subclasses. Also, this lets the isVolatile() and
getAlignment() accessors be non-virtual.
llvm-svn: 53361
|
| |
|
|
| |
llvm-svn: 53289
|
| |
|
|
|
|
|
|
|
| |
SINT_TO_FP and UINT_TO_FP. This now produces
the same code as LegalizeDAG (the previous
code was based on a mistaken idea of what
LegalizeDAG did in this case).
llvm-svn: 53288
|
| |
|
|
|
|
| |
loads.
llvm-svn: 53287
|