| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
This completes the grand PPC file renaming
llvm-svn: 23745
|
| |
|
|
| |
llvm-svn: 23743
|
| |
|
|
| |
llvm-svn: 23742
|
| |
|
|
|
|
| |
from the .td file that correspond to it
llvm-svn: 23736
|
| |
|
|
|
|
|
| |
the comparison to be 64-bits. This is fine because extensions from float
to double are free.
llvm-svn: 23589
|
| |
|
|
|
|
|
|
| |
such
split the FSEL family into 4 things instead of just two.
llvm-svn: 23588
|
| |
|
|
|
|
|
| |
These are used to represent float and double values, and the two regclasses
contain the same physical registers.
llvm-svn: 23577
|
| |
|
|
| |
llvm-svn: 23524
|
| |
|
|
| |
llvm-svn: 23506
|
| |
|
|
| |
llvm-svn: 23304
|
| |
|
|
|
|
|
|
|
| |
are allowed to generate 64-bit-only PowerPC instructions for 32 bit hosts,
such as the PowerPC 970.
This speeds up 189.lucas from 81.99 to 32.64 seconds.
llvm-svn: 23250
|
| |
|
|
|
|
| |
getting them out of the business of making stack slots.
llvm-svn: 23180
|
| |
|
|
| |
llvm-svn: 23179
|
| |
|
|
| |
llvm-svn: 23177
|
| |
|
|
| |
llvm-svn: 23170
|
| |
|
|
|
|
|
|
| |
giving it a non-instruction opcode. The dag->dag selector used to not
select the operands of the fsel, because it thought that whole tree was
already selected.
llvm-svn: 23091
|
| |
|
|
| |
llvm-svn: 23085
|
| |
|
|
| |
llvm-svn: 23084
|
| |
|
|
|
|
|
|
| |
putting it into the constant pool. This allows the isel machinery to
create constants that it will end up deciding are not needed, without them
ending up in the resultant function constant pool.
llvm-svn: 23081
|
| |
|
|
| |
llvm-svn: 23080
|
| |
|
|
|
|
|
|
|
| |
instead of in the backend. This currently handles fsel cases with registers,
but doesn't have the 0.0 and -0.0 optimization enabled yet.
Once this is finished, special hack for fp immediates can go away.
llvm-svn: 23075
|
| |
|
|
| |
llvm-svn: 23065
|
| |
|
|
|
|
| |
doesn't work for large uint constants, but we'll keep the current behavior
llvm-svn: 23061
|
| |
|
|
| |
llvm-svn: 23051
|
| |
|
|
|
|
|
| |
instructions take a consistent reg class. Implement ISD::UNDEF in the dag->dag
selector to generate this, fixing UnitTests/2003-07-06-IntOverflow.
llvm-svn: 23028
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Emit the indcall sequence as:
mtctr inreg
mr R12, inreg
btctr
If inreg and R12 aren't coallesced, this reduces the odds of having the mtctr
and btctr in the same dispatch group. :)
llvm-svn: 23023
|
| |
|
|
|
|
| |
target independent code in SelectionDAG.cpp
llvm-svn: 23002
|
| |
|
|
|
|
| |
Prefer 'neg X' to 'subfic 0, X' since it does not set XER[CA]
llvm-svn: 23000
|
| |
|
|
|
|
| |
that is conditionally executed
llvm-svn: 22960
|
| |
|
|
|
|
|
|
| |
simplifies BRTWOWAY into BR if one of the results is a fall-through.
Unless I'm missing something, there is no reason to duplicate this
in the target-specific code.
llvm-svn: 22952
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
it in the block. This codegens:
int %test(bool %c) {
%retval = select bool %c, int 17, int 1
ret int %retval
}
as:
_test:
rlwinm r2, r3, 0, 31, 31
li r2, 17
cmpwi cr0, r3, 0
bne .LBB_test_2 ;
.LBB_test_1: ;
li r2, 1
.LBB_test_2: ;
or r3, r2, r2
blr
instead of:
_test:
rlwinm r2, r3, 0, 31, 31
li r2, 17
li r4, 1
cmpwi cr0, r3, 0
bne .LBB_test_2 ;
.LBB_test_1: ;
or r2, r4, r4
.LBB_test_2: ;
or r3, r2, r2
blr
... which is one fewer instruction. The savings are more significant for
global address and constantfp nodes.
llvm-svn: 22946
|
| |
|
|
|
|
| |
instruction.
llvm-svn: 22901
|
| |
|
|
| |
llvm-svn: 22882
|
| |
|
|
| |
llvm-svn: 22870
|
| |
|
|
|
|
|
|
| |
as the argument to LIS rather than the result of HA16(constant).
The DAG->DAG ISel was already doing the right thing.
llvm-svn: 22865
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now for int foo() { return -1; } we generate:
_foo:
li r3, -1
blr
instead of
_foo:
lis r2, -1
ori r3, r2, 65535
blr
llvm-svn: 22864
|
| |
|
|
|
|
| |
to make the code follow people's expectations better.
llvm-svn: 22861
|
| |
|
|
| |
llvm-svn: 22858
|
| |
|
|
| |
llvm-svn: 22848
|
| |
|
|
|
|
|
| |
selector. Also, there is no difference between addSImm and addImm, so just
use addImm, folding some branches.
llvm-svn: 22819
|
| |
|
|
| |
llvm-svn: 22818
|
| |
|
|
|
|
| |
marked as legal.
llvm-svn: 22816
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Remove dead code in ISD::Constant handling
Add support for add long, imm16
We now codegen 'long long foo(long long a) { return ++a; }'
as:
addic r4, r4, 1
addze r3, r3
blr
instead of:
li r2, 1
li r5, 0
addc r2, r4, r2
adde r3, r3, r5
blr
llvm-svn: 22811
|
| |
|
|
| |
llvm-svn: 22808
|
| |
|
|
|
|
|
| |
fixme from the PowerPC backend. Emit slightly better code for legalizing
select_cc.
llvm-svn: 22805
|
| |
|
|
|
|
| |
can be shared with the DAG->DAG selector.
llvm-svn: 22799
|
| |
|
|
| |
llvm-svn: 22792
|
| |
|
|
|
|
| |
consistent with gcc.
llvm-svn: 22791
|
| |
|
|
|
|
|
|
|
| |
1. Not selecting the false value of a select_cc in the false arm, which
isn't legal for nested selects.
2. Actually returning the node we created and Legalized in the FP_TO_UINT
Expander.
llvm-svn: 22789
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
codegen for FP_TO_UINT by using the legalizer's SELECT variant.
Implement a codegen improvement for SELECT_CC, selecting the false node in
the MBB that feeds the phi node. This allows us to codegen:
void foo(int *a, int b, int c) { int d = (a < b) ? 5 : 9; *a = d; }
as:
_foo:
li r2, 5
cmpw cr0, r4, r3
bgt .LBB_foo_2 ; entry
.LBB_foo_1: ; entry
li r2, 9
.LBB_foo_2: ; entry
stw r2, 0(r3)
blr
insted of:
_foo:
li r2, 5
li r5, 9
cmpw cr0, r4, r3
bgt .LBB_foo_2 ; entry
.LBB_foo_1: ; entry
or r2, r5, r5
.LBB_foo_2: ; entry
stw r2, 0(r3)
blr
llvm-svn: 22784
|