| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the conditional for the BRCOND statement. For instance, it will generate:
addl %eax, %ecx
jo LOF
instead of
addl %eax, %ecx
; About 10 instructions to compare the signs of LHS, RHS, and sum.
jl LOF
llvm-svn: 60123
|
|
|
|
|
|
|
|
|
|
| |
performance in most cases on the Grawp tester, but does speed some
things up (like shootout/hash by 15%). This also doesn't impact
compile time in a noticable way on the Grawp tester.
It also, of course, gets the testcase it was designed for right :)
llvm-svn: 60120
|
|
|
|
| |
llvm-svn: 60110
|
|
|
|
| |
llvm-svn: 60102
|
|
|
|
|
|
| |
Custom lower AND, OR, XOR bitwise operations.
llvm-svn: 60098
|
|
|
|
| |
llvm-svn: 60095
|
|
|
|
|
|
|
| |
and the LiveInterval.h top-level comment and accordingly. This fixes blocks
having spurious live-in registers in boundary cases.
llvm-svn: 60092
|
|
|
|
| |
llvm-svn: 60088
|
|
|
|
|
|
| |
current location in the file the stream is writing to.
llvm-svn: 60085
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
heuristic: the value is already live at the new memory operation if
it is used by some other instruction in the memop's block. This is
cheap and simple to compute (moreso than full liveness).
This improves the new heuristic even more. For example, it cuts two
out of three new instructions out of 255.vortex:DbmFileInGrpHdr,
which is one of the functions that the heuristic regressed. This
overall eliminates another 40 instructions from 403.gcc and visibly
reduces register pressure in 255.vortex (though this only actually
ends up saving the 2 instructions from the whole program).
llvm-svn: 60084
|
|
|
|
|
|
| |
__attribute__ notation which is supported on more platforms.
llvm-svn: 60083
|
|
|
|
|
|
|
|
|
|
| |
phrased in terms of liveness instead of as a horrible hack. :)
In pratice, this doesn't change the generated code for either
255.vortex or 403.gcc, but it could cause minor code changes in
theory. This is framework for coming changes.
llvm-svn: 60082
|
|
|
|
| |
llvm-svn: 60080
|
|
|
|
| |
llvm-svn: 60076
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
-enable-smarter-addr-folding to llc) that gives CGP a better
cost model for when to sink computations into addressing modes.
The basic observation is that sinking increases register
pressure when part of the addr computation has to be available
for other reasons, such as having a use that is a non-memory
operation. In cases where it works, it can substantially reduce
register pressure.
This code is currently an overall win on 403.gcc and 255.vortex
(the two things I've been looking at), but there are several
things I want to do before enabling it by default:
1. This isn't doing any caching of results, so it is much slower
than it could be. It currently slows down release-asserts llc
by 1.7% on 176.gcc: 27.12s -> 27.60s.
2. This doesn't think about inline asm memory operands yet.
3. The cost model botches the case when the needed value is live
across the computation for other reasons.
I'll continue poking at this, and eventually turn it on as llcbeta.
llvm-svn: 60074
|
|
|
|
|
|
| |
first before trying to convert it to an integer.
llvm-svn: 60072
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
optimize addressing modes. This allows us to optimize things like isel-sink2.ll
into:
movl 4(%esp), %eax
cmpb $0, 4(%eax)
jne LBB1_2 ## F
LBB1_1: ## TB
movl $4, %eax
ret
LBB1_2: ## F
movzbl 7(%eax), %eax
ret
instead of:
_test:
movl 4(%esp), %eax
cmpb $0, 4(%eax)
leal 4(%eax), %eax
jne LBB1_2 ## F
LBB1_1: ## TB
movl $4, %eax
ret
LBB1_2: ## F
movzbl 3(%eax), %eax
ret
This shrinks (e.g.) 403.gcc from 1133510 to 1128345 lines of .s.
Note that the 2008-10-16-SpillerBug.ll testcase is dubious at best, I doubt
it is really testing what it thinks it is.
llvm-svn: 60068
|
|
|
|
|
|
| |
fixes the leakage of those strings and avoids the creation of such strings in static cosntructors (should result in a little improvement of startup time)
llvm-svn: 60064
|
|
|
|
|
|
| |
differ. Thanks, Duncan.
llvm-svn: 60043
|
|
|
|
|
|
| |
if sematics of float does not allow arithmetics.
llvm-svn: 60042
|
|
|
|
| |
llvm-svn: 60041
|
|
|
|
|
|
|
|
|
| |
(a) Remove conditionally removed code in SelectXAddr. Basically, hope for the
best that the A-form and D-form address predicates catch everything before
the code decides to emit a X-form address.
(b) Expand vector store test cases to include the usual suspects.
llvm-svn: 60034
|
|
|
|
| |
llvm-svn: 60016
|
|
|
|
| |
llvm-svn: 60015
|
|
|
|
|
|
|
| |
if the operands have the same sign and the sum has sign opposite to that of the
operands."
llvm-svn: 60014
|
|
|
|
|
|
|
|
| |
can recursively match things) and scales by 0 by ignoring them.
This triggers once in 403.gcc, saving 1 (!!!!) instruction in the
whole huge app.
llvm-svn: 60013
|
|
|
|
|
|
|
|
| |
into a new AddressingModeMatcher class. This makes it easier
to reason about and reduces passing around of stuff, but has
no functionality change.
llvm-svn: 60012
|
|
|
|
|
|
| |
new FindMaximalLegalAddressingModeForOperation helper method.
llvm-svn: 60011
|
|
|
|
| |
llvm-svn: 60010
|
|
|
|
| |
llvm-svn: 60009
|
|
|
|
|
|
|
|
| |
they were too tight according to bug 3126.
Fix bug 3126.
llvm-svn: 60006
|
|
|
|
|
|
|
|
|
| |
introduce any new spilling; it just uses unused registers.
Refactor the SUnit topological sort code out of the RRList scheduler and
make use of it to help with the post-pass scheduler.
llvm-svn: 59999
|
|
|
|
| |
llvm-svn: 59998
|
|
|
|
| |
llvm-svn: 59990
|
|
|
|
| |
llvm-svn: 59989
|
|
|
|
| |
llvm-svn: 59985
|
|
|
|
|
|
| |
test/CodeGen/X86/isel-sink.ll
llvm-svn: 59976
|
|
|
|
|
|
| |
with an undef.
llvm-svn: 59972
|
|
|
|
|
|
|
| |
- Mark "add with overflow" as having a custom lowering for X86. Give it a null
lowering representation for now.
llvm-svn: 59971
|
|
|
|
|
|
|
|
|
| |
(a) Slight rethink on i64 zero/sign/any extend code - use a shuffle to
directly zero-extend i32 to i64, but use rotates and shifts for
sign extension. Also ensure unified register consistency.
(b) Add new test harness for i64 operations: i64ops.ll
llvm-svn: 59970
|
|
|
|
|
|
|
| |
to removePred because an SUnit can both data-depend and anti-depend
on the same SUnit.
llvm-svn: 59969
|
|
|
|
| |
llvm-svn: 59968
|
|
|
|
|
|
| |
obscure tail-merging opportunities.
llvm-svn: 59967
|
|
|
|
|
|
|
|
|
|
| |
(a) Improve the extract element code: there's no need to do gymnastics with
rotates into the preferred slot if a shuffle will do the same thing.
(b) Rename a couple of SPUISD pseudo-instructions for readability and better
semantic correspondence.
(c) Fix i64 sign/any/zero extension lowering.
llvm-svn: 59965
|
|
|
|
| |
llvm-svn: 59961
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(this doesn't happen that often, since most code
does not use illegal types) then follow it by a
DAG combiner run that is allowed to generate
illegal operations but not illegal types. I didn't
modify the target combiner code to distinguish like
this between illegal operations and illegal types,
so it will not produce illegal operations as well
as not producing illegal types.
llvm-svn: 59960
|
|
|
|
| |
llvm-svn: 59958
|
|
|
|
|
|
| |
they can be distributed along with the header files.
llvm-svn: 59953
|
|
|
|
| |
llvm-svn: 59952
|
|
|
|
|
|
|
|
| |
value. It must now be as if the pointer were allocated and has not escaped to
the caller. Thanks to Dan Gohman for pointing out the error in the original
and helping devise this definition.
llvm-svn: 59940
|