| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
should come from the arbitrary ops map.
This fixes Regression/CodeGen/PowerPC/2005-12-01-Crash.ll
llvm-svn: 24571
|
|
|
|
|
|
|
|
|
|
| |
selecting a node and use a mix of getTargetNode() and SelectNodeTo. Because
SelectNodeTo didn't check the CSE maps for a preexisting node and didn't insert
its result into the CSE maps, we would sometimes miss a CSE opportunity.
This is extremely rare, but worth fixing for completeness.
llvm-svn: 24565
|
|
|
|
| |
llvm-svn: 24548
|
|
|
|
|
|
| |
replaceAllUses'ing.
llvm-svn: 24539
|
|
|
|
|
|
| |
GlobalValue * and index pair. Update getGlobalAddress() for symmetry.
llvm-svn: 24524
|
|
|
|
| |
llvm-svn: 24523
|
|
|
|
|
|
| |
contributed by Daniel Berlin, with a few cleanups here and there by me.
llvm-svn: 24515
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
vector operations (load, add, sub, mul).
This allows us to codegen:
void %foo(<4 x float> * %a) {
entry:
%tmp1 = load <4 x float> * %a;
%tmp2 = add <4 x float> %tmp1, %tmp1
store <4 x float> %tmp2, <4 x float> *%a
ret void
}
on ppc as:
_foo:
lfs f0, 12(r3)
lfs f1, 8(r3)
lfs f2, 4(r3)
lfs f3, 0(r3)
fadds f0, f0, f0
fadds f1, f1, f1
fadds f2, f2, f2
fadds f3, f3, f3
stfs f0, 12(r3)
stfs f1, 8(r3)
stfs f2, 4(r3)
stfs f3, 0(r3)
blr
llvm-svn: 24484
|
|
|
|
| |
llvm-svn: 24418
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
packed types with an element count of 1, although more generic support is
coming. This allows LLVM to turn the following code:
void %foo(<1 x float> * %a) {
entry:
%tmp1 = load <1 x float> * %a;
%tmp2 = add <1 x float> %tmp1, %tmp1
store <1 x float> %tmp2, <1 x float> *%a
ret void
}
Into:
_foo:
lfs f0, 0(r3)
fadds f0, f0, f0
stfs f0, 0(r3)
blr
llvm-svn: 24416
|
|
|
|
| |
llvm-svn: 24300
|
|
|
|
|
|
|
|
| |
eliminates the vector, allows constant time removal of a node froma graph, and makes iteration over the all nodes list stable when adding
nodes to the graph.
llvm-svn: 24263
|
|
|
|
|
|
| |
individuallyallocated. Further, in the common case where a node has a single value, justreference an element from a small array. This is a small compile-time win.
llvm-svn: 24251
|
|
|
|
|
|
|
|
|
| |
array.This saves 12 bytes from SDNode, but doesn't speed things up substantially
(our graphs apparently already fit within the cache on my g5). In any case
this reduces memory usage.
llvm-svn: 24249
|
|
|
|
|
|
|
|
| |
set and eliminating the need to iterate whenever something is removed (which
can be really slow in some cases). Thx to Jim for pointing out something silly
I was getting stuck on. :)
llvm-svn: 24241
|
|
|
|
| |
llvm-svn: 23886
|
|
|
|
|
|
| |
Kill some dead code.
llvm-svn: 23706
|
|
|
|
| |
llvm-svn: 23684
|
|
|
|
|
|
| |
removal of a bunch of ad-hoc and crufty code from SelectionDAG.cpp.
llvm-svn: 23682
|
|
|
|
| |
llvm-svn: 23678
|
|
|
|
| |
llvm-svn: 23663
|
|
|
|
|
|
| |
C-X's
llvm-svn: 23662
|
|
|
|
| |
llvm-svn: 23660
|
|
|
|
|
|
| |
implements CodeGen/PowerPC/div-2.ll
llvm-svn: 23659
|
|
|
|
| |
llvm-svn: 23641
|
|
|
|
|
|
|
| |
with the dag combiner. This speeds up espresso by 8%, reaching performance
parity with the dag-combiner-disabled llc.
llvm-svn: 23636
|
|
|
|
| |
llvm-svn: 23635
|
|
|
|
|
|
|
| |
dead node elim and dag combiner passes where the root is potentially updated.
This fixes a fixme in the dag combiner.
llvm-svn: 23634
|
|
|
|
|
|
|
|
| |
Though I have done extensive testing, it is possible that this will break
things in configs I can't test. Please let me know if this causes a problem
and I'll fix it ASAP.
llvm-svn: 23504
|
|
|
|
|
|
|
|
|
| |
This happens all the time on PPC for bool values, e.g. eliminating a xori
in inverted-bool-compares.ll.
This should be added to the dag combiner as well.
llvm-svn: 23403
|
|
|
|
|
|
|
| |
select (x < y), 1, 0 -> (x < y) incorrectly: the setcc returns i1 but the
select returned i32. Add the zero extend as needed.
llvm-svn: 23301
|
|
|
|
| |
llvm-svn: 23300
|
|
|
|
|
|
| |
as setcc and select next.
llvm-svn: 23295
|
|
|
|
| |
llvm-svn: 23278
|
|
|
|
|
|
| |
as well as fixing how we replace old values with new values.
llvm-svn: 23260
|
|
|
|
|
|
|
|
| |
we were losing a node, causing an assertion to fail. Now we eagerly delete
discovered CSE's, and provide an optional vector to keep track of these
discovered equivalences.
llvm-svn: 23255
|
|
|
|
| |
llvm-svn: 23235
|
|
|
|
| |
llvm-svn: 23224
|
|
|
|
|
|
|
|
|
|
| |
from the binary ops map, even if they had multiple results. This latent bug
caused a few failures with the dag isel last night.
To prevent stuff like this from happening in the future, add some really
strict checking to make sure that the CSE maps always match up with reality!
llvm-svn: 23221
|
|
|
|
| |
llvm-svn: 23203
|
|
|
|
|
|
|
|
|
|
| |
over to DAGCombiner.cpp
1. Don't assume that SetCC returns i1 when folding (xor (setcc) constant)
2. Don't duplicate code in folding AND with AssertZext that is handled by
MaskedValueIsZero
llvm-svn: 23196
|
|
|
|
| |
llvm-svn: 23169
|
|
|
|
| |
llvm-svn: 23166
|
|
|
|
|
|
| |
case in MaskedValueIsZero was wrong.
llvm-svn: 23165
|
|
|
|
|
|
| |
MaskedValueIsZero.
llvm-svn: 23164
|
|
|
|
|
|
|
|
| |
likethis, it is a requirement on PPC, which can have an f32 value in r3 at onepoint in a function and a f64 value in r3 at another point. :(
This fixes compilation of mesa
llvm-svn: 23161
|
|
|
|
| |
llvm-svn: 23148
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
them. This allows for elminination of redundant extends in the entry
blocks of functions on PowerPC.
Add support for i32 x i32 -> i64 multiplies, by recognizing when the inputs
to ISD::MUL in ExpandOp are actually just extended i32 values and not real
i64 values. this allows us to codegen
int mulhs(int a, int b) { return ((long long)a * b) >> 32; }
as:
_mulhs:
mulhw r3, r4, r3
blr
instead of:
_mulhs:
mulhwu r2, r4, r3
srawi r5, r3, 31
mullw r5, r4, r5
add r2, r2, r5
srawi r4, r4, 31
mullw r3, r4, r3
add r3, r2, r3
blr
with a similar improvement on x86.
llvm-svn: 23147
|
|
|
|
| |
llvm-svn: 23131
|
|
|
|
| |
llvm-svn: 23122
|