aboutsummaryrefslogtreecommitdiffstats
path: root/test/Transforms
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2010-08-27 23:31:36 +0000
committerOwen Anderson <resistor@mac.com>2010-08-27 23:31:36 +0000
commita0b59f6bd23afaeba923b94f46838cffd5218a12 (patch)
tree0ac25e8321349e71ebdc071c25df9b28d97a8d32 /test/Transforms
parentee61fcf98bb84e7e9f3450035bef92c4d087c0ae (diff)
downloadexternal_llvm-a0b59f6bd23afaeba923b94f46838cffd5218a12.zip
external_llvm-a0b59f6bd23afaeba923b94f46838cffd5218a12.tar.gz
external_llvm-a0b59f6bd23afaeba923b94f46838cffd5218a12.tar.bz2
Add a prototype of a new peephole optimizing pass that uses LazyValue info to simplify PHIs and select's.
This pass addresses the missed optimizations from PR2581 and PR4420. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112325 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r--test/Transforms/ValuePropagation/dg.exp3
-rw-r--r--test/Transforms/ValuePropagation/phi.ll17
-rw-r--r--test/Transforms/ValuePropagation/select.ll25
3 files changed, 45 insertions, 0 deletions
diff --git a/test/Transforms/ValuePropagation/dg.exp b/test/Transforms/ValuePropagation/dg.exp
new file mode 100644
index 0000000..de42dad
--- /dev/null
+++ b/test/Transforms/ValuePropagation/dg.exp
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.ll]]
diff --git a/test/Transforms/ValuePropagation/phi.ll b/test/Transforms/ValuePropagation/phi.ll
new file mode 100644
index 0000000..f150876
--- /dev/null
+++ b/test/Transforms/ValuePropagation/phi.ll
@@ -0,0 +1,17 @@
+; RUN: opt < %s -value-propagation -S | FileCheck %s
+; PR2581
+
+; CHECK: @run
+define i32 @run(i1 %C) nounwind {
+ br i1 %C, label %exit, label %body
+
+body: ; preds = %0
+; CHECK-NOT: select
+ %A = select i1 %C, i32 10, i32 11 ; <i32> [#uses=1]
+; CHECK: ret i32 11
+ ret i32 %A
+
+exit: ; preds = %0
+; CHECK: ret i32 10
+ ret i32 10
+} \ No newline at end of file
diff --git a/test/Transforms/ValuePropagation/select.ll b/test/Transforms/ValuePropagation/select.ll
new file mode 100644
index 0000000..02acc8f
--- /dev/null
+++ b/test/Transforms/ValuePropagation/select.ll
@@ -0,0 +1,25 @@
+; RUN: opt < %s -value-propagation -S | FileCheck %s
+; PR4420
+
+declare i1 @ext()
+; CHECK: @foo
+define i1 @foo() {
+entry:
+ %cond = tail call i1 @ext() ; <i1> [#uses=2]
+ br i1 %cond, label %bb1, label %bb2
+
+bb1: ; preds = %entry
+ %cond2 = tail call i1 @ext() ; <i1> [#uses=1]
+ br i1 %cond2, label %bb3, label %bb2
+
+bb2: ; preds = %bb1, %entry
+; CHECK-NOT: phi i1
+ %cond_merge = phi i1 [ %cond, %entry ], [ false, %bb1 ] ; <i1> [#uses=1]
+; CHECK: ret i1 false
+ ret i1 %cond_merge
+
+bb3: ; preds = %bb1
+ %res = tail call i1 @ext() ; <i1> [#uses=1]
+; CHECK: ret i1 %res
+ ret i1 %res
+} \ No newline at end of file