| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
the [I|F]CmpInst constructors. Who knew!?
llvm-svn: 75200
|
|
|
|
| |
llvm-svn: 74748
|
|
|
|
| |
llvm-svn: 73362
|
|
|
|
|
|
|
| |
addresses, involving Base values which do not have Pointer type.
This fixes PR4297.
llvm-svn: 72739
|
|
|
|
|
|
| |
FindFunctionBackedges function.
llvm-svn: 70819
|
|
|
|
| |
llvm-svn: 68485
|
|
|
|
| |
llvm-svn: 67811
|
|
|
|
|
|
|
| |
called from llc, not opt, but it's an IR level
optimization nevertheless.)
llvm-svn: 67724
|
|
|
|
|
|
|
|
| |
make sure the copy is inserted before the try range (unless it's used as an input to the invoke, then insert it after the last use), not at the end of the bb.
Also re-apply r66140 which was disabled as a workaround.
llvm-svn: 66976
|
|
|
|
|
|
|
|
|
|
|
| |
in the Ada testcase. Reverting this only covers up
the real problem, which is a nasty conceptual difficulty
in the phi elimination pass: when eliminating phi nodes
in landing pads, the register copies need to come before
the invoke, not at the end of the basic block which is
too late... See PR3784.
llvm-svn: 66826
|
|
|
|
| |
llvm-svn: 66140
|
|
|
|
|
|
| |
other passes, e.g. loop strength reduction.
llvm-svn: 65134
|
|
|
|
|
|
| |
printing getName(), so that unnamed values are printed correctly.
llvm-svn: 64468
|
|
|
|
|
|
| |
forget about already inserted expressions.
llvm-svn: 64362
|
|
|
|
|
|
|
|
|
| |
There is now a direct way from value-use-iterator to incoming block in PHINode's API.
This way we avoid the iterator->index->iterator trip, and especially the costly
getOperandNo() invocation. Additionally there is now an assertion that the iterator
really refers to one of the PHI's Uses.
llvm-svn: 62869
|
|
|
|
| |
llvm-svn: 62470
|
|
|
|
|
|
| |
suggested by Chris.
llvm-svn: 62099
|
|
|
|
| |
llvm-svn: 61752
|
|
|
|
|
|
|
|
| |
edges of single block loops. It now does a DFS walk to find loop back edges.
- Use SplitBlockPredecessors to factor out common predecessors of the critical edge destination. This is disabled for now due to some regressions.
llvm-svn: 61248
|
|
|
|
|
|
|
| |
predecessor is itself. This doesn't make sense, and this is
a dead infinite loop anyway.
llvm-svn: 60210
|
|
|
|
|
|
|
|
|
|
| |
wrappers around the interesting code and use an obscure iterator
abstraction that dates back many many years.
Move EraseDeadInstructions to Transforms/Utils and name it
RecursivelyDeleteTriviallyDeadInstructions.
llvm-svn: 60191
|
|
|
|
|
|
| |
it ends up being the entry block.
llvm-svn: 60180
|
|
|
|
| |
llvm-svn: 60163
|
|
|
|
|
|
|
|
|
|
| |
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: 60088
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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: 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 59990
|
|
|
|
| |
llvm-svn: 59989
|
|
|
|
| |
llvm-svn: 59985
|
|
|
|
|
|
| |
test/CodeGen/X86/isel-sink.ll
llvm-svn: 59976
|
|
|
|
|
|
| |
with an undef.
llvm-svn: 59972
|
|
|
|
| |
llvm-svn: 56549
|
|
|
|
| |
llvm-svn: 56546
|
|
|
|
| |
llvm-svn: 55779
|
|
|
|
| |
llvm-svn: 54128
|
|
|
|
|
|
|
|
|
|
|
| |
of apint codegen failure is the DAG combiner doing
the wrong thing because it was comparing MVT's using
< rather than comparing the number of bits. Removing
the < method makes this mistake impossible to commit.
Instead, add helper methods for comparing bits and use
them.
llvm-svn: 52098
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and better control the abstraction. Rename the type
to MVT. To update out-of-tree patches, the main
thing to do is to rename MVT::ValueType to MVT, and
rewrite expressions like MVT::getSizeInBits(VT) in
the form VT.getSizeInBits(). Use VT.getSimpleVT()
to extract a MVT::SimpleValueType for use in switch
statements (you will get an assert failure if VT is
an extended value type - these shouldn't exist after
type legalization).
This results in a small speedup of codegen and no
new testsuite failures (x86-64 linux).
llvm-svn: 52044
|
|
|
|
|
|
| |
use it instead of duplicating its functionality.
llvm-svn: 51499
|
|
|
|
|
|
| |
Legacy interfaces will be in place for some time. (Merge from use-diet branch.)
llvm-svn: 51200
|
|
|
|
|
|
|
| |
several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017
|
|
|
|
|
|
| |
Patch by Matthijs Kooijman!
llvm-svn: 50861
|