| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 24256
|
| |
|
|
|
|
| |
allocator from 23s to 11s on kc++ in debug mode.
llvm-svn: 24255
|
| |
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 24227
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 24029
|
| |
|
|
| |
llvm-svn: 24019
|
| |
|
|
|
|
|
| |
FP_TO_SINT is preferred to a larger FP_TO_UINT. This seems to be begging
for a TLI.isOperationCustom() helper function.
llvm-svn: 23992
|
| |
|
|
| |
llvm-svn: 23980
|
| |
|
|
|
|
| |
in the future, remove it.
llvm-svn: 23952
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
pointer marking the end of the list, the zero *must* be cast to the pointer
type. An un-cast zero is a 32-bit int, and at least on x86_64, gcc will
not extend the zero to 64 bits, thus allowing the upper 32 bits to be
random junk.
The new END_WITH_NULL macro may be used to annotate a such a function
so that GCC (version 4 or newer) will detect the use of un-casted zero
at compile time.
llvm-svn: 23888
|
| |
|
|
| |
llvm-svn: 23886
|
| |
|
|
|
|
|
|
| |
the input is that type, this caused a failure on gs on X86 last night.
Move the hard checks into Build[US]Div since that is where decisions like
this should be made.
llvm-svn: 23881
|
| |
|
|
|
|
| |
2005-10-21-longlonggtu.ll.
llvm-svn: 23875
|
| |
|
|
|
|
|
|
|
|
|
|
| |
For example, we can now join things like [0-30:0)[31-40:1)[52-59:2)
with [40:60:0) if the 52-59 range is defined by a copy from the 40-60 range.
The resultant range ends up being [0-30:0)[31-60:1).
This fires a lot through-out the test suite (e.g. shrinking bc from
19492 -> 18509 machineinstrs) though most gains are smaller (e.g. about
50 copies eliminated from crafty).
llvm-svn: 23866
|
| |
|
|
|
|
|
|
|
|
| |
(an unused method).
Fix the merger so that it can merge ranges like this [10:12)[16:40) with
[12:38) into [10:40) instead of bogus ranges. This sort of input will be
possible for the merger coming shortly
llvm-svn: 23865
|
| |
|
|
| |
llvm-svn: 23856
|
| |
|
|
|
|
|
|
|
|
| |
Add a new flag to TargetLowering indicating if the target has really cheap
signed division by powers of two, make ppc use it. This will probably go
away in the future.
Implement some more ISD::SDIV folds in the dag combiner
Remove now dead code in the x86 backend.
llvm-svn: 23853
|
| |
|
|
|
|
| |
Andrew for bringing this to my attn.
llvm-svn: 23850
|
| |
|
|
|
|
|
| |
for types that aren't legal, and fail a divisor is less than zero
comparison, which would cause us to drop a subtract.
llvm-svn: 23846
|
| |
|
|
| |
llvm-svn: 23845
|
| |
|
|
| |
llvm-svn: 23844
|
| |
|
|
|
|
|
|
| |
Fix a *bug* in the extendIntervalEndTo method. In particular, if adding
[2:10) to an interval containing [0:2),[10:30), we produced [0:10),[10,30).
Which is not the most smart thing to do. Now produce [0:30).
llvm-svn: 23841
|
| |
|
|
| |
llvm-svn: 23839
|
| |
|
|
|
|
|
| |
that the nodes can be folded with other nodes, and we can not duplicate
code in every backend. Alpha will probably want this too.
llvm-svn: 23835
|
| |
|
|
|
|
| |
the pair of elements is a legal type.
llvm-svn: 23804
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a lot throughout many programs. In particular, specfp triggers it a bunch for
constant FP nodes when you have code like cond ? 1.0 : -1.0.
If the PPC ISel exposed the loads implicit in pic references to external globals,
we would be able to eliminate a load in cases like this as well:
%X = external global int
%Y = external global int
int* %test4(bool %C) {
%G = select bool %C, int* %X, int* %Y
ret int* %G
}
Note that this breaks things that use SrcValue's (see the fixme), but since nothing
uses them yet, this is ok.
Also, simplify some code to use hasOneUse() on an SDOperand instead of hasNUsesOfValue directly.
llvm-svn: 23781
|
| |
|
|
| |
llvm-svn: 23777
|
| |
|
|
| |
llvm-svn: 23776
|
| |
|
|
| |
llvm-svn: 23774
|