summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorXin Tong <trent.xin.tong@gmail.com>2017-01-09 17:57:08 +0000
committerXin Tong <trent.xin.tong@gmail.com>2017-01-09 17:57:08 +0000
commitc13a8e84d1fac50b99f34d419f53dbb2c5417012 (patch)
treee6eab9ef6632cf91f944aa756f23af8c3700759e /llvm/test
parent0ac1ce70ba5a70772ea432ffc20ec77968f15a24 (diff)
downloadbcm5719-llvm-c13a8e84d1fac50b99f34d419f53dbb2c5417012.tar.gz
bcm5719-llvm-c13a8e84d1fac50b99f34d419f53dbb2c5417012.zip
Intrinsic::Bitreverse is safe to speculate
Summary: Intrinsic::Bitreverse is safe to speculate Reviewers: hfinkel, mkuper, arsenm, jmolloy Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D28471 llvm-svn: 291456
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/LICM/hoisting.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/hoisting.ll b/llvm/test/Transforms/LICM/hoisting.ll
index cb6981ede1e..c61131b476b 100644
--- a/llvm/test/Transforms/LICM/hoisting.ll
+++ b/llvm/test/Transforms/LICM/hoisting.ll
@@ -5,6 +5,8 @@
declare void @foo()
+declare i32 @llvm.bitreverse.i32(i32)
+
; This testcase tests for a problem where LICM hoists
; potentially trapping instructions when they are not guaranteed to execute.
define i32 @test1(i1 %c) {
@@ -122,3 +124,28 @@ then: ; preds = %tailrecurse
ifend: ; preds = %tailrecurse
ret { i32*, i32 } %d
}
+
+; CHECK: define i32 @hoist_bitreverse(i32)
+; CHECK: bitreverse
+; CHECK: br label %header
+define i32 @hoist_bitreverse(i32) {
+ br label %header
+
+header:
+ %sum = phi i32 [ 0, %1 ], [ %5, %latch ]
+ %2 = phi i32 [ 0, %1 ], [ %6, %latch ]
+ %3 = icmp slt i32 %2, 1024
+ br i1 %3, label %body, label %return
+
+body:
+ %4 = call i32 @llvm.bitreverse.i32(i32 %0)
+ %5 = add i32 %sum, %4
+ br label %latch
+
+latch:
+ %6 = add nsw i32 %2, 1
+ br label %header
+
+return:
+ ret i32 %sum
+}
OpenPOWER on IntegriCloud