add a note.
authorChris Lattner <sabre@nondot.org>
Fri, 28 Dec 2007 22:30:05 +0000 (22:30 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Dec 2007 22:30:05 +0000 (22:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45388 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/README.txt

index b94bdeac94ed98f4192495dc937a56a3b6e5178b..2ef77cb8d309c609db75d625861ba4c138eed8a9 100644 (file)
@@ -480,6 +480,38 @@ int i;
   }
 }
 
+//===---------------------------------------------------------------------===//
+
+We should investigate an instruction sinking pass.  Consider this silly
+example in pic mode:
+
+#include <assert.h>
+void foo(int x) {
+  assert(x);
+  //...
+}
+
+we compile this to:
+_foo:
+       subl    $28, %esp
+       call    "L1$pb"
+"L1$pb":
+       popl    %eax
+       cmpl    $0, 32(%esp)
+       je      LBB1_2  # cond_true
+LBB1_1:        # return
+       # ...
+       addl    $28, %esp
+       ret
+LBB1_2:        # cond_true
+...
+
+The PIC base computation (call+popl) is only used on one path through the 
+code, but is currently always computed in the entry block.  It would be 
+better to sink the picbase computation down into the block for the 
+assertion, as it is the only one that uses it.  This happens for a lot of 
+code with early outs.
 
+In this case, whole-function-isel would also handle this.
 
 //===---------------------------------------------------------------------===//