summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-07-16 19:10:00 +0000
committerChris Lattner <sabre@nondot.org>2002-07-16 19:10:00 +0000
commite47dea14e1dc3ac71dd8e97c7dcede7218e37378 (patch)
tree1e914f5973336f7ef9fb8caa139f446b2739ad51 /llvm
parent4e25609b871d31015dbe8514a5cca78e01fc9258 (diff)
downloadbcm5719-llvm-e47dea14e1dc3ac71dd8e97c7dcede7218e37378.tar.gz
bcm5719-llvm-e47dea14e1dc3ac71dd8e97c7dcede7218e37378.zip
Add testcase for raise opportunity missed.
llvm-svn: 2930
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Regression/Transforms/LevelRaise/2002-07-16-MissedRaise.ll25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/test/Regression/Transforms/LevelRaise/2002-07-16-MissedRaise.ll b/llvm/test/Regression/Transforms/LevelRaise/2002-07-16-MissedRaise.ll
new file mode 100644
index 00000000000..4aec440b94d
--- /dev/null
+++ b/llvm/test/Regression/Transforms/LevelRaise/2002-07-16-MissedRaise.ll
@@ -0,0 +1,25 @@
+; This case fails raise because the store requires that it's argument is of a
+; particular type, but the gep is unable to propogate types backwards through
+; it, because it doesn't know what type to ask it's operand to be.
+;
+; This could be fixed by making all stores add themselves to a list, and check
+; their arguments are consistent AFTER all other values are propogated.
+
+; RUN: if as < %s | opt -raise | dis | grep '= cast'
+; RUN: then exit 1
+; RUN: else exit 0
+; RUN: fi
+
+ %Tree = type %struct.tree*
+ %struct.tree = type { int, double, double, %Tree, %Tree, %Tree, %Tree }
+
+void %reverse(%Tree %t) {
+bb0: ;[#uses=0]
+ %cast219 = cast %Tree %t to sbyte*** ; <sbyte***> [#uses=2]
+ %reg2221 = getelementptr sbyte*** %cast219, uint 6 ; <sbyte***> [#uses=1]
+ %reg108 = load sbyte*** %reg2221 ; <sbyte**> [#uses=2]
+ %reg247 = getelementptr sbyte*** %cast219, uint 5 ; <sbyte***> [#uses=1]
+ store sbyte** %reg108, sbyte*** %reg247
+ ret void
+}
+
OpenPOWER on IntegriCloud