| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 16893
|
| |
|
|
| |
llvm-svn: 16892
|
| |
|
|
| |
llvm-svn: 16887
|
| |
|
|
| |
llvm-svn: 16886
|
| |
|
|
| |
llvm-svn: 16885
|
| |
|
|
|
|
| |
returns 'bool' type.
llvm-svn: 16884
|
| |
|
|
|
|
| |
Wrap a long comment line.
llvm-svn: 16883
|
| |
|
|
|
|
|
| |
argument values passed in (so they're not dead until *after* the call),
and callees are free to modify those registers.
llvm-svn: 16882
|
| |
|
|
|
|
|
|
| |
Deal with allocating stack space for outgoing args and copying them into the
correct stack slots (at least, we can copy <=32-bit int args).
We now correctly generate ADJCALLSTACK* instructions.
llvm-svn: 16881
|
| |
|
|
| |
llvm-svn: 16878
|
| |
|
|
|
|
|
| |
stored to, but are stored at variable indexes. This occurs at least in
176.gcc, but probably others, and we should handle it for completeness.
llvm-svn: 16876
|
| |
|
|
|
|
|
|
|
| |
has a large number of users. Instead, just keep track of whether we're
making changes as we do so.
This patch has no functionlity changes.
llvm-svn: 16874
|
| |
|
|
| |
llvm-svn: 16873
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
we know that all uses of the global will trap if the pointer contained is
null. In this case, we forward substitute the stored value to any uses.
This has the effect of devirtualizing trivial globals in trivial cases. For
example, 164.gzip contains this:
gzip.h:extern int (*read_buf) OF((char *buf, unsigned size));
bits.c: read_buf = file_read;
deflate.c: lookahead = read_buf((char*)window,
deflate.c: n = read_buf((char*)window+strstart+lookahead, more);
Since read_buf has to point to file_read at every use, we just replace
the calls through read_buf with a direct call to file_read.
This occurs in several benchmarks, including 176.gcc and 164.gzip. Direct
calls are good and stuff.
llvm-svn: 16871
|
| |
|
|
| |
llvm-svn: 16870
|
| |
|
|
|
|
| |
-debug-only!
llvm-svn: 16868
|
| |
|
|
| |
llvm-svn: 16866
|
| |
|
|
|
|
|
| |
default 32/BE target on sparc hosts, and ppc will continue to be the default
on other hosts.
llvm-svn: 16865
|
| |
|
|
| |
llvm-svn: 16864
|
| |
|
|
| |
llvm-svn: 16863
|
| |
|
|
| |
llvm-svn: 16861
|
| |
|
|
|
|
|
|
|
| |
the -sse* options (to avoid misleading people).
Also, the stack alignment of the target doesn't depend on whether SSE is
eventually implemented, so remove a comment.
llvm-svn: 16860
|
| |
|
|
|
|
|
|
| |
which prevented setcc's from being folded into branches. It appears that
conditional branchinst's CC operand is actually operand(2), not operand(0)
as we might expect. :(
llvm-svn: 16859
|
| |
|
|
| |
llvm-svn: 16858
|
| |
|
|
|
|
|
|
|
|
| |
* Do not lead dangling dead constants prevent optimization
* Iterate global optimization while we're making progress.
These changes allow us to be more aggressive, handling cases like
GlobalOpt/iterate.llx without a problem (turning it into 'ret int 0').
llvm-svn: 16857
|
| |
|
|
|
|
| |
we know it is dead.
llvm-svn: 16855
|
| |
|
|
| |
llvm-svn: 16854
|
| |
|
|
|
|
| |
254.gap.
llvm-svn: 16853
|
| |
|
|
| |
llvm-svn: 16852
|
| |
|
|
| |
llvm-svn: 16850
|
| |
|
|
| |
llvm-svn: 16849
|
| |
|
|
| |
llvm-svn: 16848
|
| |
|
|
| |
llvm-svn: 16847
|
| |
|
|
| |
llvm-svn: 16845
|
| |
|
|
|
|
|
|
|
|
|
| |
optimizations to trigger much more often. This allows the elimination of
several dozen more global variables in Programs/External. Note that we only
do this for non-constant globals: constant globals will already be optimized
out if the accesses to them permit it.
This implements Transforms/GlobalOpt/globalsra.llx
llvm-svn: 16842
|
| |
|
|
|
|
| |
instcombine xform, which is why we didn't notice it before.
llvm-svn: 16840
|
| |
|
|
|
|
| |
This comes up when doing adds to bitfield elements.
llvm-svn: 16836
|
| |
|
|
|
|
|
| |
This triggers in cases of bitfield additions, opening opportunities for
future improvements.
llvm-svn: 16834
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of one or more 1 bits (may wrap from least significant bit to most
significant bit) as the rlwinm rather than andi., andis., or some longer
instructons sequence.
int andn4(int z) { return z & -4; }
int clearhi(int z) { return z & 0x0000FFFF; }
int clearlo(int z) { return z & 0xFFFF0000; }
int clearmid(int z) { return z & 0x00FFFF00; }
int clearwrap(int z) { return z & 0xFF0000FF; }
_andn4:
rlwinm r3, r3, 0, 0, 29
blr
_clearhi:
rlwinm r3, r3, 0, 16, 31
blr
_clearlo:
rlwinm r3, r3, 0, 0, 15
blr
_clearmid:
rlwinm r3, r3, 0, 8, 23
blr
_clearwrap:
rlwinm r3, r3, 0, 24, 7
blr
llvm-svn: 16832
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Fix an illegal argument to getClassB when deciding whether or not to
sign extend a byte load.
2. Initial addition of isLoad and isStore flags to the instruction .td file
for eventual use in a scheduler.
3. Rewrite of how constants are handled in emitSimpleBinaryOperation so
that we can emit the PowerPC shifted immediate instructions far more
often. This allows us to emit the following code:
int foo(int x) { return x | 0x00F0000; }
_foo:
.LBB_foo_0: ; entry
; IMPLICIT_DEF
oris r3, r3, 15
blr
llvm-svn: 16826
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
loading a 32bit constant into a register whose low halfword is all zeroes.
We now omit the ori after the lis for the following C code:
int bar(int y) { return y * 0x00F0000; }
_bar:
.LBB_bar_0: ; entry
; IMPLICIT_DEF
lis r2, 15
mullw r3, r3, r2
blr
llvm-svn: 16825
|
| |
|
|
| |
llvm-svn: 16824
|
| |
|
|
| |
llvm-svn: 16814
|
| |
|
|
|
|
|
| |
a map. This caused problems if a later object happened to be allocated at
the free'd object's address.
llvm-svn: 16813
|
| |
|
|
|
|
|
|
|
|
| |
exponential behavior (bork!). This patch processes stuff with an
explicit SCC finder, allowing the algorithm to be more clear,
efficient, and also (as a bonus) correct! This gets us back to taking
0.6s to disassemble my horrible .bc file that previously took something
> 30 mins.
llvm-svn: 16811
|
| |
|
|
|
|
| |
speedup, but has the advantage of not breaking a bunch of programs!
llvm-svn: 16806
|
| |
|
|
| |
llvm-svn: 16804
|
| |
|
|
| |
llvm-svn: 16803
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Instead of handling dead functions specially, just nuke them.
* Be more aggressive about cleaning up after constification, in
particular, handle getelementptr instructions and constantexprs.
* Be a little bit more structured about how we process globals.
*** Delete globals that are only stored to, and never read. These are
clearly not useful, so they should go. This implements deadglobal.llx
This last one triggers quite a few times. In particular, 2208 in the
external tests, 1865 of which are in 252.eon. This shrinks eon from
1995094 to 1732341 bytes of bytecode.
llvm-svn: 16802
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
simplifications of the resultant program to avoid making later passes
do it all.
This allows us to constify globals that just have the same constant that
they are initialized stored into them.
Suprisingly this comes up ALL of the freaking time, dozens of times in
SPEC, 30 times in vortex alone.
For example, on 256.bzip2, it allows us to constify these two globals:
%smallMode = internal global ubyte 0 ; <ubyte*> [#uses=8]
%verbosity = internal global int 0 ; <int*> [#uses=49]
Which (with later optimizations) results in the bytecode file shrinking
from 82286 to 69686 bytes! Lets hear it for IPO :)
For the record, it's nuking lots of "if (verbosity > 2) { do lots of stuff }"
code.
llvm-svn: 16793
|