summaryrefslogtreecommitdiff
path: root/lib/Target/README.txt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-05-11 17:41:40 +0000
committerChris Lattner <sabre@nondot.org>2009-05-11 17:41:40 +0000
commit32c5f1702438b5b33a39d68336f8137b491b1406 (patch)
tree16b81de15853464ecbdcf59fb5c90dd747842efc /lib/Target/README.txt
parentd919a8bc8a81068f343ba4c0c37591c52282950e (diff)
downloadllvm-32c5f1702438b5b33a39d68336f8137b491b1406.tar.gz
llvm-32c5f1702438b5b33a39d68336f8137b491b1406.tar.bz2
llvm-32c5f1702438b5b33a39d68336f8137b491b1406.tar.xz
remove some done things: we have nocapture and SROA is smarter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71443 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/README.txt')
-rw-r--r--lib/Target/README.txt90
1 files changed, 13 insertions, 77 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt
index 1c33f3946d..8399115e59 100644
--- a/lib/Target/README.txt
+++ b/lib/Target/README.txt
@@ -167,44 +167,6 @@ if anyone cared enough about sincos.
//===---------------------------------------------------------------------===//
-Scalar Repl cannot currently promote this testcase to 'ret long cst':
-
- %struct.X = type { i32, i32 }
- %struct.Y = type { %struct.X }
-
-define i64 @bar() {
- %retval = alloca %struct.Y, align 8
- %tmp12 = getelementptr %struct.Y* %retval, i32 0, i32 0, i32 0
- store i32 0, i32* %tmp12
- %tmp15 = getelementptr %struct.Y* %retval, i32 0, i32 0, i32 1
- store i32 1, i32* %tmp15
- %retval.upgrd.1 = bitcast %struct.Y* %retval to i64*
- %retval.upgrd.2 = load i64* %retval.upgrd.1
- ret i64 %retval.upgrd.2
-}
-
-it should be extended to do so.
-
-//===---------------------------------------------------------------------===//
-
--scalarrepl should promote this to be a vector scalar.
-
- %struct..0anon = type { <4 x float> }
-
-define void @test1(<4 x float> %V, float* %P) {
- %u = alloca %struct..0anon, align 16
- %tmp = getelementptr %struct..0anon* %u, i32 0, i32 0
- store <4 x float> %V, <4 x float>* %tmp
- %tmp1 = bitcast %struct..0anon* %u to [4 x float]*
- %tmp.upgrd.1 = getelementptr [4 x float]* %tmp1, i32 0, i32 1
- %tmp.upgrd.2 = load float* %tmp.upgrd.1
- %tmp3 = mul float %tmp.upgrd.2, 2.000000e+00
- store float %tmp3, float* %P
- ret void
-}
-
-//===---------------------------------------------------------------------===//
-
Turn this into a single byte store with no load (the other 3 bytes are
unmodified):
@@ -634,32 +596,6 @@ once.
//===---------------------------------------------------------------------===//
-We should extend parameter attributes to capture more information about
-pointer parameters for alias analysis. Some ideas:
-
-1. Add a "nocapture" attribute, which indicates that the callee does not store
- the address of the parameter into a global or any other memory location
- visible to the callee. This can be used to make basicaa and other analyses
- more powerful. It is true for things like memcpy, strcat, and many other
- things, including structs passed by value, most C++ references, etc.
-2. Generalize readonly to be set on parameters. This is important mod/ref
- info for the function, which is important for basicaa and others. It can
- also be used by the inliner to avoid inserting a memcpy for byval
- arguments when the function is inlined.
-
-These functions can be inferred by various analysis passes such as the
-globalsmodrefaa pass. Note that getting #2 right is actually really tricky.
-Consider this code:
-
-struct S; S G;
-void caller(S byvalarg) { G.field = 1; ... }
-void callee() { caller(G); }
-
-The fact that the caller does not modify byval arg is not enough, we need
-to know that it doesn't modify G either. This is very tricky.
-
-//===---------------------------------------------------------------------===//
-
We should add an FRINT node to the DAG to model targets that have legal
implementations of ceil/floor/rint.
@@ -1690,6 +1626,19 @@ foo:
//===---------------------------------------------------------------------===//
+The arg promotion pass should make use of nocapture to make its alias analysis
+stuff much more precise.
+
+//===---------------------------------------------------------------------===//
+
+The following functions should be optimized to use a select instead of a
+branch (from gcc PR40072):
+
+char char_int(int m) {if(m>7) return 0; return m;}
+int int_char(char m) {if(m>7) return 0; return m;}
+
+//===---------------------------------------------------------------------===//
+
Instcombine should replace the load with a constant in:
static const char x[4] = {'a', 'b', 'c', 'd'};
@@ -1704,19 +1653,6 @@ is a null (making it a C string). There's no need for these restrictions.
//===---------------------------------------------------------------------===//
-The arg promotion pass should make use of nocapture to make its alias analysis
-stuff much more precise.
-
-//===---------------------------------------------------------------------===//
-
-The following functions should be optimized to use a select instead of a
-branch (from gcc PR40072):
-
-char char_int(int m) {if(m>7) return 0; return m;}
-int int_char(char m) {if(m>7) return 0; return m;}
-
-//===---------------------------------------------------------------------===//
-
InstCombine's "turn load from constant into constant" optimization should be
more aggressive in the presence of bitcasts. For example, because of unions,
this code: