| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
SPARC condition codes, not in terms of the DAG condcodes. This allows us to
write nice clean patterns for cmovs/branches.
llvm-svn: 25815
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
uint %test(uint %X) {
%Y = call uint %llvm.ctpop.i32(uint %X)
ret uint %Y
}
to:
test:
save -96, %o6, %o6
sll %i0, 0, %l0
popc %l0, %i0
restore %g0, %g0, %g0
retl
nop
instead of to 40 logical ops. Note the shift-by-zero that clears the top
part of the 64-bit V9 register.
Testcase here: CodeGen/SparcV8/ctpop.ll
llvm-svn: 25814
|
| |
|
|
|
|
| |
running it.
llvm-svn: 25811
|
| |
|
|
| |
llvm-svn: 25810
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
patterns. This allows emission of this code:
t1:
save -96, %o6, %o6
subcc %i0, %i1, %l0
move %icc, %i0, %i2
or %g0, %i2, %i0
restore %g0, %g0, %g0
retl
nop
instead of this:
t1:
save -96, %o6, %o6
subcc %i0, %i1, %l0
be .LBBt1_2 !
nop
.LBBt1_1: !
or %g0, %i2, %i0
.LBBt1_2: !
restore %g0, %g0, %g0
retl
nop
for this:
int %t1(int %a, int %b, int %c) {
%tmp.2 = seteq int %a, %b
%tmp3 = select bool %tmp.2, int %a, int %c
ret int %tmp3
}
llvm-svn: 25809
|
| |
|
|
|
|
|
| |
1. Default to having V9 instructions, instead of just V8.
2. unless -enable-sparc-v9-insts is passed, disable V9 (for use with llcbeta)
llvm-svn: 25807
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the two operations together. This allows us to compile this:
void %two(int %a, int* %b) {
%tmp.2 = seteq int %a, 0
%tmp.0.0 = select bool %tmp.2, int 10, int 20
store int %tmp.0.0, int* %b
ret void
}
into:
two:
save -96, %o6, %o6
or %g0, 20, %l0
or %g0, 10, %l1
subcc %i0, 0, %l2
be .LBBtwo_2 ! entry
nop
.LBBtwo_1: ! entry
or %g0, %l0, %l1
.LBBtwo_2: ! entry
st %l1, [%i1]
restore %g0, %g0, %g0
retl
nop
instead of:
two:
save -96, %o6, %o6
sethi 0, %l0
or %g0, 1, %l1
or %g0, 20, %l2
or %g0, 10, %l3
subcc %i0, 0, %l4
be .LBBtwo_2 ! entry
nop
.LBBtwo_1: ! entry
or %g0, %l0, %l1
.LBBtwo_2: ! entry
subcc %l1, 0, %l0
bne .LBBtwo_4 ! entry
nop
.LBBtwo_3: ! entry
or %g0, %l2, %l3
.LBBtwo_4: ! entry
st %l3, [%i1]
restore %g0, %g0, %g0
retl
nop
llvm-svn: 25806
|
| |
|
|
|
|
|
| |
of being unable to search for symbols in an EXE. It will also allow other
existing hacks to be improved.
llvm-svn: 25805
|
| |
|
|
|
|
| |
of lowered target nodes.
llvm-svn: 25804
|
| |
|
|
|
|
| |
interface,making isMaskedValueZeroForTargetNode simpler, and useable from other partsof the compiler.
llvm-svn: 25803
|
| |
|
|
|
|
| |
allowing redundant and's to be eliminated by the dag combiner.
llvm-svn: 25800
|
| |
|
|
|
|
| |
to permit recursion
llvm-svn: 25799
|
| |
|
|
| |
llvm-svn: 25798
|
| |
|
|
| |
llvm-svn: 25795
|
| |
|
|
| |
llvm-svn: 25794
|
| |
|
|
|
|
|
| |
This fixes llvm-test/SingleSource/UnitTests/2006-01-29-SimpleIndirectCall.c
and PR704
llvm-svn: 25793
|
| |
|
|
| |
llvm-svn: 25789
|
| |
|
|
| |
llvm-svn: 25788
|
| |
|
|
| |
llvm-svn: 25787
|
| |
|
|
| |
llvm-svn: 25786
|
| |
|
|
| |
llvm-svn: 25785
|
| |
|
|
| |
llvm-svn: 25784
|
| |
|
|
| |
llvm-svn: 25783
|
| |
|
|
|
|
| |
instead.
llvm-svn: 25780
|
| |
|
|
| |
llvm-svn: 25778
|
| |
|
|
|
|
| |
few stores under certain conditions.
llvm-svn: 25777
|
| |
|
|
| |
llvm-svn: 25776
|
| |
|
|
|
|
| |
instead of lying and saying we have it.
llvm-svn: 25775
|
| |
|
|
| |
llvm-svn: 25774
|
| |
|
|
| |
llvm-svn: 25773
|
| |
|
|
|
|
| |
custom expansion of ConstantFP nodes.
llvm-svn: 25772
|
| |
|
|
|
|
| |
'fpimm' in .td files is now TargetConstantFP.
llvm-svn: 25771
|
| |
|
|
|
|
| |
why all this code isn't autogenerated. :(
llvm-svn: 25770
|
| |
|
|
| |
llvm-svn: 25767
|
| |
|
|
| |
llvm-svn: 25761
|
| |
|
|
| |
llvm-svn: 25760
|
| |
|
|
| |
llvm-svn: 25755
|
| |
|
|
| |
llvm-svn: 25754
|
| |
|
|
| |
llvm-svn: 25751
|
| |
|
|
| |
llvm-svn: 25750
|
| |
|
|
| |
llvm-svn: 25749
|
| |
|
|
| |
llvm-svn: 25748
|
| |
|
|
| |
llvm-svn: 25747
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
faster. This cuts about 120 lines of code out of the legalizer (mostly code
checking to see if operands have changed).
It also fixes an ugly performance issue, where the legalizer cloned the entire
graph after any change. Now the "UpdateNodeOperands" method gives it a chance
to reuse nodes if the operands of a node change but not its opcode or valuetypes.
This speeds up instruction selection time on kimwitu++ by about 8.2% with a
release build.
llvm-svn: 25746
|
| |
|
|
| |
llvm-svn: 25745
|
| |
|
|
| |
llvm-svn: 25744
|
| |
|
|
| |
llvm-svn: 25742
|
| |
|
|
| |
llvm-svn: 25740
|
| |
|
|
| |
llvm-svn: 25739
|
| |
|
|
| |
llvm-svn: 25738
|