| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
replaceAllUses'ing.
llvm-svn: 24539
|
| |
|
|
| |
llvm-svn: 24537
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
changes allow us to generate the following code:
_foo:
li r2, 0
lvx v0, r2, r3
vaddfp v0, v0, v0
stvx v0, r2, r3
blr
for this llvm:
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
}
llvm-svn: 24534
|
| |
|
|
| |
llvm-svn: 24531
|
| |
|
|
|
|
|
|
|
|
| |
file to become corrupted due to interactions between mmap'd memory segments
and file descriptors closing. The problem is completely avoiding by using
a third temporary file.
Patch provided by Evan Jones
llvm-svn: 24527
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
and make a few changes to the legalization machinery to support more than
16 types.
llvm-svn: 24511
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
| |
generates it. Make MVT::Vector expand-only, and remove the code in
Legalize that attempts to legalize it.
The plan for supporting N x Type is to continually epxand it in ExpandOp
until it gets down to 2 x Type, where it will be scalarized into a pair of
scalars.
llvm-svn: 24482
|
| |
|
|
|
|
| |
break control dependence.
llvm-svn: 24437
|
| |
|
|
| |
llvm-svn: 24429
|
| |
|
|
|
|
| |
HAVE_GV case fixed up by me.
llvm-svn: 24428
|
| |
|
|
|
|
| |
from last night.
llvm-svn: 24427
|
| |
|
|
| |
llvm-svn: 24425
|
| |
|
|
| |
llvm-svn: 24421
|
| |
|
|
| |
llvm-svn: 24420
|
| |
|
|
| |
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: 24412
|
| |
|
|
| |
llvm-svn: 24387
|
| |
|
|
| |
llvm-svn: 24385
|
| |
|
|
| |
llvm-svn: 24377
|
| |
|
|
| |
llvm-svn: 24318
|
| |
|
|
| |
llvm-svn: 24306
|
| |
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 24261
|
| |
|
|
| |
llvm-svn: 24259
|
| |
|
|
| |
llvm-svn: 24256
|
| |
|
|
|
|
| |
eliminates almost one node per block in common cases.
llvm-svn: 24254
|
| |
|
|
|
|
| |
turn power-of-two multiplies into shifts early to improve compile time.
llvm-svn: 24253
|
| |
|
|
| |
llvm-svn: 24252
|
| |
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 24247
|
| |
|
|
|
|
|
|
| |
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: 24231
|
| |
|
|
|
|
|
|
| |
alignment information appropriately. Includes code for PowerPC to support
fixed-size allocas with alignment larger than the stack. Support for
arbitrarily aligned dynamic allocas coming soon.
llvm-svn: 24224
|
| |
|
|
| |
llvm-svn: 24188
|
| |
|
|
| |
llvm-svn: 24187
|
| |
|
|
| |
llvm-svn: 24180
|
| |
|
|
|
|
| |
XCode's indenting.
llvm-svn: 24159
|
| |
|
|
|
|
| |
may fix PR652. Thanks to Andrew for tracking down the problem.
llvm-svn: 24145
|
| |
|
|
|
|
|
|
| |
2. Iterate operands and not uses (performance.)
3. Some long pending comment changes.
llvm-svn: 24119
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a special case hack for X86, make the hack more general: if an incoming argument
register is not used in any block other than the entry block, don't copy it to
a vreg. This helps us compile code like this:
%struct.foo = type { int, int, [0 x ubyte] }
int %test(%struct.foo* %X) {
%tmp1 = getelementptr %struct.foo* %X, int 0, uint 2, int 100
%tmp = load ubyte* %tmp1 ; <ubyte> [#uses=1]
%tmp2 = cast ubyte %tmp to int ; <int> [#uses=1]
ret int %tmp2
}
to:
_test:
lbz r3, 108(r3)
blr
instead of:
_test:
lbz r2, 108(r3)
or r3, r2, r2
blr
The (dead) copy emitted to copy r3 into a vreg for extra-block uses was
increasing the live range of r3 past the load, preventing the coallescing.
This implements CodeGen/PowerPC/reg-coallesce-simple.ll
llvm-svn: 24115
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
generating results in vregs that will need them. In the case of something
like this: CopyToReg((add X, Y), reg1024), we no longer emit code like
this:
reg1025 = add X, Y
reg1024 = reg 1025
Instead, we emit:
reg1024 = add X, Y
Whoa! :)
llvm-svn: 24111
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This implements test/Regression/CodeGen/PowerPC/mul-neg-power-2.ll,
producing:
_foo:
slwi r2, r3, 1
subfic r3, r2, 63
blr
instead of:
_foo:
mulli r2, r3, -2
addi r3, r2, 63
blr
llvm-svn: 24106
|
| |
|
|
|
|
| |
VT as the killing one. Fix fixes PR491
llvm-svn: 24034
|