This adds in some code (currently disabled unless you pass
authorChris Lattner <sabre@nondot.org>
Wed, 26 Nov 2008 02:00:14 +0000 (02:00 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 26 Nov 2008 02:00:14 +0000 (02:00 +0000)
commit5eecb7f164a926540bc1bdffc7df81ab4ddce710
tree5f7a7e0ae18c7ecc5a5c48fa669dabe9cdcc2bee
parent794a7dbce030f93315b1305f83a374232f09bba5
This adds in some code (currently disabled unless you pass
-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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60074 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/CodeGenPrepare.cpp
test/CodeGen/X86/isel-sink3.ll [new file with mode: 0644]