aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-03-09 19:34:51 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-03-09 19:34:51 +0000
commit2265b491931554eb59edfa1c2cfbda64b2e5de1b (patch)
treea8bbeeb6741322e98a12c1ca8faa8c5db3b1b45d
parent87707b90b15bf103c2f10ad815dc215c335adcf2 (diff)
Unfinished work and ideas related to register scavenger.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35047 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/README.txt14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/Target/ARM/README.txt b/lib/Target/ARM/README.txt
index d831d63399..f0f4d51b89 100644
--- a/lib/Target/ARM/README.txt
+++ b/lib/Target/ARM/README.txt
@@ -427,6 +427,7 @@ http://www.inf.u-szeged.hu/gcc-arm/
http://citeseer.ist.psu.edu/debus04linktime.html
//===---------------------------------------------------------------------===//
+
gcc generates smaller code for this function at -O2 or -Os:
void foo(signed char* p) {
@@ -449,3 +450,16 @@ More seriously, there is a byte->word extend before
each comparison, where there should be only one, and the condition codes
are not remembered when the same two values are compared twice.
+//===---------------------------------------------------------------------===//
+
+More register scavenging work:
+
+1. Use the register scavenger to track frame index materialized into registers
+ (those that do not fit in addressing modes) to allow reuse in the same BB.
+2. Finish scavenging for Thumb.
+3. We know some spills and restores are unnecessary. The issue is once live
+ intervals are merged, they are not never split. So every def is spilled
+ and every use requires a restore if the register allocator decides the
+ resulting live interval is not assigned a physical register. It may be
+ possible (with the help of the scavenger) to turn some spill / restore
+ pairs into register copies.