| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 47200
|
|
|
|
|
|
|
| |
it actually does. Simplify CountOperands a little by reusing
ComputeMemOperandsEnd. And reword some comments for both.
llvm-svn: 47198
|
|
|
|
| |
llvm-svn: 47196
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
tblgen will complain if a sign-extended constant does not fit into a
data type smaller than i32, e.g., i16. This causes a problem when certain
hex constants are used, such as 0xff for byte masks or immediate xor
values.
tblgen will try the sign-extended value first and, if the sign extended
value would overflow, it tries to see if the unsigned value will fit.
Consequently, a software developer can now safely incant:
(XORHIr16 R16C:$rA, 0xffff)
which is somewhat clearer and more informative than incanting:
(XORHIr16 R16C:$rA, (i16 -1))
even if the two are bitwise equivalent.
Tblgen also outputs the 64-bit unsigned constant in the generated ISel code
when getTargetConstant() is invoked.
llvm-svn: 47188
|
|
|
|
| |
llvm-svn: 47179
|
|
|
|
|
|
| |
with the TIED_TO attribute.
llvm-svn: 47177
|
|
|
|
|
|
|
| |
that should be checked for the TIED_TO attribute instead of
using CountOperands.
llvm-svn: 47176
|
|
|
|
|
|
|
|
|
| |
in a ret node. These are created as i32 constants
but on some platforms i32 is not legal. This
fixes 26 "make check" failures, for example
Alpha/2005-07-12-TwoMallocCalls.ll.
llvm-svn: 47172
|
|
|
|
|
|
|
| |
register defs and uses after each successful coalescing.
- Also removed a number of hacks and fixed some subtle kill information bugs.
llvm-svn: 47167
|
|
|
|
|
|
| |
machine instr will change its definition register.
llvm-svn: 47166
|
|
|
|
| |
llvm-svn: 47164
|
|
|
|
|
|
| |
with a hard-coded operand number.
llvm-svn: 47163
|
|
|
|
| |
llvm-svn: 47128
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the return value is zero-extended if it isn't
sign-extended. It may also be any-extended.
Also, if a floating point value was returned
in a larger floating point type, pass 1 as the
second operand to FP_ROUND, which tells it
that all the precision is in the original type.
I think this is right but I could be wrong.
Finally, when doing libcalls, set isZExt on
a parameter if it is "unsigned". Currently
isSExt is set when signed, and nothing is
set otherwise. This should be right for all
calls to standard library routines.
llvm-svn: 47122
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) ConstantFP is now expand by default
2) ConstantFP is not turned into TargetConstantFP during Legalize
if it is legal.
This allows ConstantFP to be handled like Constant, allowing for
targets that can encode FP immediates as MachineOperands.
As a bonus, fix up Itanium FP constants, which now correctly match,
and match more constants! Hooray.
llvm-svn: 47121
|
|
|
|
|
|
| |
FP Immediates, crazily enough
llvm-svn: 47117
|
|
|
|
| |
llvm-svn: 47101
|
|
|
|
| |
llvm-svn: 47098
|
|
|
|
|
|
| |
to pass the mask APInt by value, not by reference.
llvm-svn: 47096
|
|
|
|
| |
llvm-svn: 47079
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CTTZ and CTPOP. The expansion code differs from
that in LegalizeDAG in that it chooses to take the
CTLZ/CTTZ count from the Hi/Lo part depending on
whether the Hi/Lo value is zero, not on whether
CTLZ/CTTZ of Hi/Lo returned 32 (or whatever the
width of the type is) for it. I made this change
because the optimizers may well know that Hi/Lo
is zero and exploit it. The promotion code for
CTTZ also differs from that in LegalizeDAG: it
uses an "or" to get the right result when the
original value is zero, rather than using a compare
and select. This also means the value doesn't
need to be zero extended.
llvm-svn: 47075
|
|
|
|
| |
llvm-svn: 47060
|
|
|
|
| |
llvm-svn: 47058
|
|
|
|
|
|
| |
a two-address instruction is also on the val# that defines the input.
llvm-svn: 47057
|
|
|
|
|
|
|
|
| |
its uses.
* Ignore copy instructions which have already been coalesced.
llvm-svn: 47056
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
node as soon as we create it in SDISel. Previously we would lower it in
legalize. The problem with this is that it only exposes the argument
loads implied by FORMAL_ARGUMENTs after legalize, so that only dag combine 2
can hack on them. This causes us to miss some optimizations because
datatype expansion also happens here.
Exposing the loads early allows us to do optimizations on them. For example
we now compile arg-cast.ll to:
_foo:
movl $2147483647, %eax
andl 8(%esp), %eax
ret
where we previously produced:
_foo:
subl $12, %esp
movsd 16(%esp), %xmm0
movsd %xmm0, (%esp)
movl $2147483647, %eax
andl 4(%esp), %eax
addl $12, %esp
ret
It might also make sense to do this for ISD::CALL nodes, which have implicit
stores on many targets.
llvm-svn: 47054
|
|
|
|
| |
llvm-svn: 47052
|
|
|
|
|
|
| |
type is not legal.
llvm-svn: 47048
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PR1877.
A3 = op A2 B0<kill>
...
B1 = A3 <- this copy
...
= op A3 <- more uses
==>
B2 = op B0 A2<kill>
...
B1 = B2 <- now an identify copy
...
= op B2 <- more uses
This speeds up FreeBench/neural by 29%, Olden/bh by 12%, oopack_v1p8 by 53%.
llvm-svn: 47046
|
|
|
|
|
|
| |
- removeRange() can now update value# information.
llvm-svn: 47044
|
|
|
|
| |
llvm-svn: 47043
|
|
|
|
| |
llvm-svn: 47042
|
|
|
|
|
|
|
| |
Add an overload that supports the uint64_t interface for use by clients
that haven't been updated yet.
llvm-svn: 47039
|
|
|
|
|
|
|
|
|
|
|
|
| |
handle arbitrary precision integers and any number
of parts. For example, on a 32 bit machine an i50
corresponds to two i32 parts. getCopyToParts will
extend the i50 to an i64 then write half of the i64
to each part; getCopyFromParts will combine the two
i32 parts into an i64 then truncate the result to
i50.
llvm-svn: 47024
|
|
|
|
|
|
|
| |
in preparation for apint support. These changes are
intended to have no functional effect.
llvm-svn: 46967
|
|
|
|
| |
llvm-svn: 46964
|
|
|
|
| |
llvm-svn: 46963
|
|
|
|
| |
llvm-svn: 46962
|
|
|
|
| |
llvm-svn: 46961
|
|
|
|
|
|
|
|
|
|
| |
Added member template "Add" to FoldingSetNodeID that allows "adding" arbitrary
objects to a profile via dispatch to FoldingSetTrait<T>::Profile().
Removed FoldingSetNodeID::AddAPFloat and FoldingSetNodeID::APInt, as their
functionality is now replaced using the above mentioned member template.
llvm-svn: 46957
|
|
|
|
| |
llvm-svn: 46954
|
|
|
|
|
|
| |
rather than trying to undo the kill marker afterwards.
llvm-svn: 46953
|
|
|
|
| |
llvm-svn: 46930
|
|
|
|
| |
llvm-svn: 46926
|
|
|
|
|
|
| |
no-op).
llvm-svn: 46922
|
|
|
|
| |
llvm-svn: 46918
|
|
|
|
| |
llvm-svn: 46903
|
|
|
|
|
|
| |
begin adding some methods to use it this way.
llvm-svn: 46899
|
|
|
|
| |
llvm-svn: 46896
|
|
|
|
| |
llvm-svn: 46895
|