From f4af28db0c317a46b3809524ef9d3fad666b0c66 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 12 Jan 2004 01:17:42 +0000 Subject: [PATCH] New testcase llvm-svn: 10760 --- .../Transforms/ScalarRepl/phinodepromote.ll | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/Regression/Transforms/ScalarRepl/phinodepromote.ll diff --git a/test/Regression/Transforms/ScalarRepl/phinodepromote.ll b/test/Regression/Transforms/ScalarRepl/phinodepromote.ll new file mode 100644 index 00000000000..b0a3990f5e7 --- /dev/null +++ b/test/Regression/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 +; 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 +} +