summaryrefslogtreecommitdiffstats
path: root/test/Analysis
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-05-16 01:03:12 +0000
committerChris Lattner <sabre@nondot.org>2002-05-16 01:03:12 +0000
commit5abaa0c2905ea6c5a15056783f01c9551b49f63b (patch)
tree22e507ab11666674984c4e6030880ee794008016 /test/Analysis
parentc95057b1b725c21a45eb5e8c1d65523d3c1673e9 (diff)
downloadexternal_llvm-5abaa0c2905ea6c5a15056783f01c9551b49f63b.zip
external_llvm-5abaa0c2905ea6c5a15056783f01c9551b49f63b.tar.gz
external_llvm-5abaa0c2905ea6c5a15056783f01c9551b49f63b.tar.bz2
Add tests of redundant load elimination
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2636 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r--test/Analysis/LoadVN/RLE-Eliminate.ll26
-rw-r--r--test/Analysis/LoadVN/RLE-Preserve.ll27
2 files changed, 53 insertions, 0 deletions
diff --git a/test/Analysis/LoadVN/RLE-Eliminate.ll b/test/Analysis/LoadVN/RLE-Eliminate.ll
new file mode 100644
index 0000000..a8b1bf9
--- /dev/null
+++ b/test/Analysis/LoadVN/RLE-Eliminate.ll
@@ -0,0 +1,26 @@
+; This testcase ensures that redundant loads are eliminated when they should
+; be. All RL variables (redundant loads) should be eliminated.
+;
+; RUN: if as < %s | opt -gcse | dis | grep %RL
+; RUN: then exit 1
+; RUN: else exit 0
+; RUN: fi
+;
+int "test1"(int* %P) {
+ %A = load int* %P
+ %RL = load int* %P
+ %C = add int %A, %RL
+ ret int %C
+}
+
+int "test2"(int* %P) {
+ %A = load int* %P
+ br label %BB2
+BB2:
+ br label %BB3
+BB3:
+ %RL = load int* %P
+ %B = add int %A, %RL
+ ret int %B
+}
+
diff --git a/test/Analysis/LoadVN/RLE-Preserve.ll b/test/Analysis/LoadVN/RLE-Preserve.ll
new file mode 100644
index 0000000..50a3256
--- /dev/null
+++ b/test/Analysis/LoadVN/RLE-Preserve.ll
@@ -0,0 +1,27 @@
+; This testcase ensures that redundant loads are preserved when they are not
+; allowed to be eliminated.
+; RUN: as < %s | dis > Output/%s.before
+; RUN: as < %s | opt -gcse | dis > Output/%s.after
+; RUN: diff Output/%s.before Output/%s.after
+;
+int "test1"(int* %P) {
+ %A = load int* %P
+ store int 1, int * %P
+ %B = load int* %P
+ %C = add int %A, %B
+ ret int %C
+}
+
+int "test2"(int* %P) {
+ %A = load int* %P
+ br label %BB2
+BB2:
+ store int 5, int * %P
+ br label %BB3
+BB3:
+ %B = load int* %P
+ %C = add int %A, %B
+ ret int %C
+}
+
+