History log of /external/llvm/lib/CodeGen/InterferenceCache.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
1ead68d769f27f6d68d4aaeffe4199fa2cacbc95 28-Nov-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make the LiveRegMatrix analysis available to targets.

No functional change, just moved header files.

Targets can inject custom passes between register allocation and
rewriting. This makes it possible to tweak the register allocation
before rewriting, using the full global interference checking available
from LiveRegMatrix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168806 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
042888db2bb195c86bf34afbb6907d70855d2830 21-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Convert RAGreedy to LiveRegMatrix interference checking.

Stop depending on the LiveIntervalUnions in RegAllocBase, they are about
to be removed.

The changes are mostly replacing register alias iterators with regunit
iterators, and querying LiveRegMatrix instrad of RegAllocBase.

InterferenceCache is converted to work with per-regunit
LiveIntervalUnions, and it checks fixed regunit interference separately,
using the fixed live intervals provided by LiveIntervalAnalysis.

The local splitting helper calcGapWeights() is also considering fixed
regunit interference which is kept on the side now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158867 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
6ef7da0197735a16aa534e9e2c80709d3d6e8c56 10-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add register mask support to InterferenceCache.

This makes global live range splitting behave identically with and
without register mask operands.

This is not necessarily the best way of using register masks for live
range splitting. It would be more efficient to first split global live
ranges around calls (i.e., register masks), and reserve the fine grained
per-physreg interference guidance for global live ranges that do not
cross calls.

For now the goal is to produce identical assembly when enabling register
masks.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150259 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
3bf7a1cc3c090e766b8912c6a14c3e2ec5dde7f8 10-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Remove unused variable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
c7931fd725b390142f9112952b1426560000e6b4 23-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Allow null interference cursors to be queried.

They always report 'no interference'.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135843 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
f1c709837bd11c5383fce3b8a026a7c8eaabba86 14-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Reapply r135121 with a fixed copy constructor.

Original commit message:

Count references to interference cache entries.

Each InterferenceCache::Cursor instance references a cache entry. A
non-zero reference count guarantees that the entry won't be reused for a
new register.

This makes it possible to have multiple live cursors examining
interference for different physregs.

The total number of live cursors into a cache must be kept below
InterferenceCache::getMaxCursors().

Code generation should be unaffected by this change, and it doesn't seem
to affect the cache replacement strategy either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135130 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
4fcfcf498436533ea9bc59404d10751bc76cfd2c 14-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert r135121 which broke a gcc-4.2 builder.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135122 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
6a9feaac935c9345f825b272cf3225248e282f3f 14-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Count references to interference cache entries.

Each InterferenceCache::Cursor instance references a cache entry. A
non-zero reference count guarantees that the entry won't be reused for a
new register.

This makes it possible to have multiple live cursors examining
interference for different physregs.

The total number of live cursors into a cache must be kept below
InterferenceCache::getMaxCursors().

Code generation should be unaffected by this change, and it doesn't seem
to affect the cache replacement strategy either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135121 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
c66a37df73f70ec3dbed06277763624f33ee3512 14-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Reapply r135074 and r135080 with a fix.

The cache entry referenced by the best split candidate could become
clobbered by an unsuccessful candidate.

The correct fix here is to use reference counts on the cache entries.
Coming up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135113 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
54c74e906a622c1a2d95d2fc11a7dae88a61963e 14-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Revert r135074 and r135080. They broke clamscan.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135096 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
1337e2b75a6fc52ced7f6c2b2ad05ac62b8cbdca 13-Jul-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Move the InterferenceCache cursor into the GlobalSplitCand struct.

This is in preparation of supporting multiple global split candidates in
a single live range split operation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135074 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
9d29cbad32814f31c91cd2464a3c74df412b0aac 09-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Precompute interference for neighbor blocks as long as there is no interference.

This doesn't require seeking in the live interval union, so it is very cheap.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129187 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h
5907d863659eb972ebb2afe07bc863a4c616f0ef 02-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Add an InterferenceCache class for caching per-block interference ranges.

When the greedy register allocator is splitting multiple global live ranges, it
tends to look at the same interference data many times. The InterferenceCache
class caches queries for unaltered LiveIntervalUnions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128764 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/InterferenceCache.h