summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-01-12 01:17:42 +0000
committerChris Lattner <sabre@nondot.org>2004-01-12 01:17:42 +0000
commit33a79d73bd39d3ed6c0859b023446c2e94899f7f (patch)
treee1d7edee3de3ed25640818d59ca0c62e4db9b05d /test
parent952454dbffed89dacc85b9d6253bc8203a415f14 (diff)
downloadllvm-33a79d73bd39d3ed6c0859b023446c2e94899f7f.tar.gz
llvm-33a79d73bd39d3ed6c0859b023446c2e94899f7f.tar.bz2
llvm-33a79d73bd39d3ed6c0859b023446c2e94899f7f.tar.xz
New testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10760 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Transforms/ScalarRepl/phinodepromote.ll35
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Transforms/ScalarRepl/phinodepromote.ll b/test/Transforms/ScalarRepl/phinodepromote.ll
new file mode 100644
index 0000000000..b0a3990f5e
--- /dev/null
+++ b/test/Transforms/ScalarRepl/phinodepromote.ll
@@ -0,0 +1,35 @@
+; RUN: llvm-as < %s | opt -mem2reg | llvm-dis | not grep alloca
+;
+; This tests to see if mem2reg can promote alloca instructions whose addresses
+; are used by PHI nodes that are immediately loaded. The LLVM C++ front-end
+; often generates code that looks like this (when it codegen's ?: exprs as
+; lvalues), so handling this simple extension is quite useful.
+;
+; This testcase is what the following program looks like when it reaches
+; mem2reg:
+;
+; template<typename T>
+; const T& max(const T& a1, const T& a2) { return a1 < a2 ? a1 : a2; }
+; int main() { return max(0, 1); }
+;
+
+int %main() {
+entry:
+ %mem_tmp.0 = alloca int
+ %mem_tmp.1 = alloca int
+ store int 0, int* %mem_tmp.0
+ store int 1, int* %mem_tmp.1
+ %tmp.1.i = load int* %mem_tmp.1
+ %tmp.3.i = load int* %mem_tmp.0
+ %tmp.4.i = setle int %tmp.1.i, %tmp.3.i
+ br bool %tmp.4.i, label %cond_true.i, label %cond_continue.i
+
+cond_true.i:
+ br label %cond_continue.i
+
+cond_continue.i:
+ %mem_tmp.i.0 = phi int* [ %mem_tmp.1, %cond_true.i ], [ %mem_tmp.0, %entry ]
+ %tmp.3 = load int* %mem_tmp.i.0
+ ret int %tmp.3
+}
+