| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
maps can be deleted. This happens when RAUW
replaces a node N with another equivalent node
E, deleting the first node. Solve this by
adding (N, E) to ReplacedNodes, which is already
used to remap nodes to replacements. This means
that deleted nodes are being allowed in maps,
which can be delicate: the memory may be reused
for a new node which might get confused with the
old deleted node pointer hanging around in the
maps, so detect this and flush out maps if it
occurs (ExpungeNode). The expunging operation
is expensive, however it never occurs during
a llvm-gcc bootstrap or anywhere in the nightly
testsuite. It occurs three times in "make check":
Alpha/illegal-element-type.ll,
PowerPC/illegal-element-type.ll and
X86/mmx-shift.ll. If expunging proves to be too
expensive then there are other more complicated
ways of solving the problem.
In the normal case this patch adds the overhead
of a few more map lookups, which is hopefully
negligable.
llvm-svn: 52214
|
|
|
|
|
|
| |
change for non-funky-sized integers.
llvm-svn: 52151
|
|
|
|
|
|
|
|
|
|
|
| |
of integer types. Fix the isMask APInt method to
actually work (hopefully) rather than crashing
because it adds apints of different bitwidths.
It looks like isShiftedMask is also broken, but
I'm leaving that one to the APInt people (it is
not used anywhere).
llvm-svn: 52142
|
|
|
|
|
|
|
|
|
|
|
| |
of apint codegen failure is the DAG combiner doing
the wrong thing because it was comparing MVT's using
< rather than comparing the number of bits. Removing
the < method makes this mistake impossible to commit.
Instead, add helper methods for comparing bits and use
them.
llvm-svn: 52098
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and better control the abstraction. Rename the type
to MVT. To update out-of-tree patches, the main
thing to do is to rename MVT::ValueType to MVT, and
rewrite expressions like MVT::getSizeInBits(VT) in
the form VT.getSizeInBits(). Use VT.getSimpleVT()
to extract a MVT::SimpleValueType for use in switch
statements (you will get an assert failure if VT is
an extended value type - these shouldn't exist after
type legalization).
This results in a small speedup of codegen and no
new testsuite failures (x86-64 linux).
llvm-svn: 52044
|
|
|
|
| |
llvm-svn: 51496
|
|
|
|
| |
llvm-svn: 51345
|
|
|
|
|
|
|
|
|
|
|
| |
element from address with an offset.
pshufd $1, (%rdi), %xmm0
movd %xmm0, %eax
=>
movl 4(%rdi), %eax
llvm-svn: 51026
|
|
|
|
|
|
| |
locations are at the right offset from each other.
llvm-svn: 51008
|
|
|
|
|
|
| |
if the zext is not legal.
llvm-svn: 50368
|
|
|
|
|
|
| |
sign-bit of x is known to be zero.
llvm-svn: 50357
|
|
|
|
|
|
|
|
|
|
| |
Rename SDOperandImpl back to SDOperand.
Introduce the SDUse class that represents a use of the SDNode referred by
an SDOperand. Now it is more similar to Use/Value classes.
Patch is approved by Dan Gohman.
llvm-svn: 49795
|
|
|
|
|
|
| |
by Dan Gohman is fixed.
llvm-svn: 49330
|
|
|
|
| |
llvm-svn: 49124
|
|
|
|
| |
llvm-svn: 48994
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
LLVM Value/Use does and MachineRegisterInfo/MachineOperand does.
This allows constant time for all uses list maintenance operations.
The idea was suggested by Chris. Reviewed by Evan and Dan.
Patch is tested and approved by Dan.
On normal use-cases compilation speed is not affected. On very big basic
blocks there are compilation speedups in the range of 15-20% or even better.
llvm-svn: 48822
|
|
|
|
|
|
| |
transformed to undef. But this is such a common idiom (misuse) we are going to handle it.
llvm-svn: 48792
|
|
|
|
| |
llvm-svn: 48755
|
|
|
|
|
|
| |
sdisel CSE.
llvm-svn: 48673
|
|
|
|
| |
llvm-svn: 48580
|
|
|
|
|
|
| |
result_size - n - m)))
llvm-svn: 48578
|
|
|
|
|
|
| |
fixes Bill's testcase that failed for r48491.
llvm-svn: 48542
|
|
|
|
| |
llvm-svn: 48510
|
|
|
|
|
|
| |
extend on targets where this is profitable. Passes nightly on x86-64.
llvm-svn: 48491
|
|
|
|
| |
llvm-svn: 48344
|
|
|
|
|
|
| |
X86 lowering normalize vector 0 to v4i32. However DAGCombine can fold (sub x, x) -> 0 after legalization. It can create a zero vector of a type that's not expected (e.g. v8i16). We don't want to disable the optimization since leaving a (sub x, x) is really bad. Add isel patterns for other types of vector 0 to ensure correctness. It's highly unlikely to happen other than in bugpoint reduced test cases.
llvm-svn: 48279
|
|
|
|
| |
llvm-svn: 48274
|
|
|
|
| |
llvm-svn: 48170
|
|
|
|
|
|
|
|
| |
return ValueType can depend its operands' ValueType.
This is a cosmetic change, no functionality impacted.
llvm-svn: 48145
|
|
|
|
| |
llvm-svn: 48140
|
|
|
|
|
|
| |
(e.g. v8i16 on x86) after legalizer. Instruction selection does not expect to see them. In all likelihood this can only be an issue in a bugpoint reduced test case.
llvm-svn: 48136
|
|
|
|
|
|
| |
confuses me.
llvm-svn: 47872
|
|
|
|
| |
llvm-svn: 47869
|
|
|
|
|
|
|
|
| |
Change several cases in SimplifyDemandedMask that don't ever do any
simplifying to reuse the logic in ComputeMaskedBits instead of
duplicating it.
llvm-svn: 47648
|
|
|
|
|
|
| |
also fixes cfrac, flops, and 175.vpr
llvm-svn: 47605
|
|
|
|
|
|
|
|
|
| |
after legalize. Just because a constant is legal (e.g. 0.0 in SSE)
doesn't mean that its negated value is legal (-0.0). We could make
this stronger by checking to see if the negated constant is actually
legal post negation, but it doesn't seem like a big deal.
llvm-svn: 47591
|
|
|
|
|
|
| |
a SignBitIsZero function to simplify a common use case.
llvm-svn: 47561
|
|
|
|
| |
llvm-svn: 47382
|
|
|
|
| |
llvm-svn: 47381
|
|
|
|
| |
llvm-svn: 47368
|
|
|
|
|
|
|
|
| |
check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type.
- X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC.
llvm-svn: 47290
|
|
|
|
| |
llvm-svn: 47052
|
|
|
|
| |
llvm-svn: 46954
|
|
|
|
|
|
| |
no-op).
llvm-svn: 46922
|
|
|
|
| |
llvm-svn: 46678
|
|
|
|
|
|
|
|
|
|
| |
DAGUpdateListener object pointer instead of just returning a vector
of deleted nodes. This makes the interfaces more efficient (no more
allocating a vector [at least a malloc], filling it in, then walking
it) and more clean. This also allows the client to be notified of
nodes that are *changed* but not deleted.
llvm-svn: 46677
|
|
|
|
|
|
|
|
| |
and StoreSDNode into their common base class LSBaseSDNode. Member
functions getLoadedVT and getStoredVT are replaced with the common
getMemoryVT to simplify code that will handle both loads and stores.
llvm-svn: 46538
|
|
|
|
| |
llvm-svn: 46514
|
|
|
|
| |
llvm-svn: 46424
|
|
|
|
| |
llvm-svn: 46422
|