| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
allows us to lower legal return types to something else, to meet ABI
requirements (such as that i64 be returned in two i32 regs on Darwin/ppc).
llvm-svn: 23802
|
|
|
|
|
|
| |
sized stack object if either the array size or the type size is zero.
llvm-svn: 23801
|
|
|
|
| |
llvm-svn: 23797
|
|
|
|
|
|
| |
removal of a bunch of ad-hoc and crufty code from SelectionDAG.cpp.
llvm-svn: 23682
|
|
|
|
|
|
| |
the second phase of dag combining
llvm-svn: 23631
|
|
|
|
| |
llvm-svn: 23579
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
setjmp/longjmp for llvm.setjmp/llvm.longjmp.
llvm-svn: 23481
|
|
|
|
|
|
| |
into particular vregs, emit copies into the entry MBB.
llvm-svn: 23331
|
|
|
|
|
|
| |
that option for PowerPC's beta.
llvm-svn: 23253
|
|
|
|
|
|
| |
number of elements.
llvm-svn: 23219
|
|
|
|
| |
llvm-svn: 23215
|
|
|
|
|
|
|
|
| |
instead of ZERO_EXTEND to eliminate extraneous extensions. This eliminates
dead zero extensions on formal arguments and other cases on PPC, implementing
the newly tightened up test/Regression/CodeGen/PowerPC/small-arguments.ll test.
llvm-svn: 23205
|
|
|
|
| |
llvm-svn: 23186
|
|
|
|
| |
llvm-svn: 23114
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
changes the code generated for:
short %test(short %A) {
%B = xor short %A, -32768
ret short %B
}
to:
_test:
xori r2, r3, 32768
xoris r2, r2, 65535
extsh r3, r2
blr
instead of:
_test:
rlwinm r2, r3, 0, 16, 31
xori r2, r3, 32768
xoris r2, r2, 65535
extsh r3, r2
blr
llvm-svn: 23109
|
|
|
|
|
|
| |
flag is set on an instruction.
llvm-svn: 23098
|
|
|
|
|
|
| |
the target isel crashes due to unimplemented features like calls :)
llvm-svn: 22997
|
|
|
|
|
|
| |
promoted to the right type. This fixes: IA64/2005-08-22-LegalizerCrash.ll
llvm-svn: 22969
|
|
|
|
| |
llvm-svn: 22863
|
|
|
|
|
|
|
|
|
| |
Nate noticed in yacr2 (and I know occurs in other places as well).
This is still rough, as the critical edge blocks are not intelligently placed
but is added to get some idea to see if this improves performance.
llvm-svn: 22825
|
|
|
|
| |
llvm-svn: 22822
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
used to tack a register number onto the node.
Instead of doing this, make a new node, RegisterSDNode, which is a leaf
containing a register number. These three operations just become normal
DAG nodes now, instead of requiring special handling.
Note that with this change, it is no longer correct to make illegal
CopyFromReg/CopyToReg nodes. The legalizer will not touch them, and this
is bad, so don't do it. :)
llvm-svn: 22806
|
|
|
|
|
|
|
|
| |
CC out of the SetCC operation, making SETCC a standard ternary operation and
CC's a standard DAG leaf. This will make it possible for other node to use
CC's as operands in the future...
llvm-svn: 22728
|
|
|
|
| |
llvm-svn: 22523
|
|
|
|
| |
llvm-svn: 22469
|
|
|
|
|
|
|
|
|
|
| |
1. Pass Value*'s into lowering methods so that the proper pointers can be
added to load/stores from the valist
2. Intrinsics that return void should only return a token chain, not a token
chain/retval pair.
3. Rename LowerVAArgNext -> LowerVAArg, because VANext is long gone.
llvm-svn: 22338
|
|
|
|
| |
llvm-svn: 22315
|
|
|
|
|
|
| |
than just the pointer being loaded or stored
llvm-svn: 22311
|
|
|
|
|
|
| |
See last commit for LangRef, this implements it on all targets.
llvm-svn: 22273
|
|
|
|
| |
llvm-svn: 22254
|
|
|
|
| |
llvm-svn: 22026
|
|
|
|
| |
llvm-svn: 22015
|
|
|
|
| |
llvm-svn: 22004
|
|
|
|
| |
llvm-svn: 21993
|
|
|
|
| |
llvm-svn: 21958
|
|
|
|
| |
llvm-svn: 21931
|
|
|
|
| |
llvm-svn: 21930
|
|
|
|
| |
llvm-svn: 21900
|
|
|
|
| |
llvm-svn: 21870
|
|
|
|
| |
llvm-svn: 21833
|
|
|
|
| |
llvm-svn: 21825
|
|
|
|
|
|
| |
being stored/loaded through!
llvm-svn: 21806
|
|
|
|
| |
llvm-svn: 21804
|
|
|
|
|
|
| |
Lower debug info to noops.
llvm-svn: 21698
|
|
|
|
|
|
|
|
|
| |
population (ctpop). Generic lowering is implemented, however only promotion
is implemented for SelectionDAG at the moment.
More coming soon.
llvm-svn: 21676
|
|
|
|
|
|
|
| |
was contributed by Morten Ofstad, with some minor tweaks and bug fixes added
by me.
llvm-svn: 21636
|
|
|
|
|
|
|
|
| |
enables one to use alias analysis in the backends.
(TRUNK)Stores and (EXT|ZEXT|SEXT)Loads have an extra SDOperand which is a SrcValueSDNode which contains the Value*. Note that if the operation is introduced by the backend, it will still have the operand, but the value* will be null.
llvm-svn: 21599
|