summaryrefslogtreecommitdiff
path: root/lib/Target/README.txt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-11-27 17:12:30 +0000
committerChris Lattner <sabre@nondot.org>2009-11-27 17:12:30 +0000
commit1d159838a380d239fd280cb15e5a04c664f9cd61 (patch)
tree1152c56f97be162ca26894bb419ef19e4cafddd7 /lib/Target/README.txt
parent6d94926a52934a2ab36a72386766350efb5e708a (diff)
downloadllvm-1d159838a380d239fd280cb15e5a04c664f9cd61.tar.gz
llvm-1d159838a380d239fd280cb15e5a04c664f9cd61.tar.bz2
llvm-1d159838a380d239fd280cb15e5a04c664f9cd61.tar.xz
add a deadargelim note.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90009 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/README.txt')
-rw-r--r--lib/Target/README.txt23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt
index 267f60a204..4029134f13 100644
--- a/lib/Target/README.txt
+++ b/lib/Target/README.txt
@@ -2,6 +2,29 @@ Target Independent Opportunities:
//===---------------------------------------------------------------------===//
+Dead argument elimination should be enhanced to handle cases when an argument is
+dead to an externally visible function. Though the argument can't be removed
+from the externally visible function, the caller doesn't need to pass it in.
+For example in this testcase:
+
+ void foo(int X) __attribute__((noinline));
+ void foo(int X) { sideeffect(); }
+ void bar(int A) { foo(A+1); }
+
+We compile bar to:
+
+define void @bar(i32 %A) nounwind ssp {
+ %0 = add nsw i32 %A, 1 ; <i32> [#uses=1]
+ tail call void @foo(i32 %0) nounwind noinline ssp
+ ret void
+}
+
+The add is dead, we could pass in 'i32 undef' instead. This occurs for C++
+templates etc, which usually have linkonce_odr/weak_odr linkage, not internal
+linkage.
+
+//===---------------------------------------------------------------------===//
+
With the recent changes to make the implicit def/use set explicit in
machineinstrs, we should change the target descriptions for 'call' instructions
so that the .td files don't list all the call-clobbered registers as implicit