summaryrefslogtreecommitdiffstats
path: root/polly/test/CodeGen/Intrinsics
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2017-05-14 09:09:54 +0000
committerTobias Grosser <tobias@grosser.es>2017-05-14 09:09:54 +0000
commitb693f42b71d3ca4e8bc3df59bd483a82234b99fd (patch)
treee12d980da3b156b332ecd6f3f9b4adf95fa9c676 /polly/test/CodeGen/Intrinsics
parent2f10a671429c543e818c4bf6df2e7d0552a8c953 (diff)
downloadbcm5719-llvm-b693f42b71d3ca4e8bc3df59bd483a82234b99fd.tar.gz
bcm5719-llvm-b693f42b71d3ca4e8bc3df59bd483a82234b99fd.zip
[Polly] Fix code generation of llvm.expect intrinsic
At the time of code generation, an instruction with an llvm intrinsic is ignored in copyBB. However, if the value of the instruction is used later in the program, the value needs to be synthesized. However, this is causing some issues with the instructions being generated in a hoisted basic block. Removing llvm.expect from the list of ignored intrinsics fixes this bug. This resolves http://llvm.org/PR32324. Contributed-by: Annanay Agarwal <cs14btech11001@iith.ac.in> Tags: #polly Differential Revision: https://reviews.llvm.org/D32992 llvm-svn: 303006
Diffstat (limited to 'polly/test/CodeGen/Intrinsics')
-rw-r--r--polly/test/CodeGen/Intrinsics/llvm-expect.ll34
1 files changed, 34 insertions, 0 deletions
diff --git a/polly/test/CodeGen/Intrinsics/llvm-expect.ll b/polly/test/CodeGen/Intrinsics/llvm-expect.ll
new file mode 100644
index 00000000000..84057e27652
--- /dev/null
+++ b/polly/test/CodeGen/Intrinsics/llvm-expect.ll
@@ -0,0 +1,34 @@
+; RUN: opt %loadPolly -S -polly-codegen < %s | FileCheck %s
+;
+; Check that we generate code without crashing.
+;
+; CHECK: polly.start
+;
+target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+
+; Function Attrs: nounwind uwtable
+define void @quux() unnamed_addr #0 {
+bb:
+ br label %bb1
+
+bb1: ; preds = %bb
+ %tmp = icmp eq i64 0, 0
+ br i1 %tmp, label %bb2, label %bb7
+
+bb2: ; preds = %bb1
+ %tmp3 = icmp ult i64 4, 12
+ %tmp4 = zext i1 %tmp3 to i64
+ %tmp5 = tail call i64 @llvm.expect.i64(i64 %tmp4, i64 0)
+ %tmp6 = trunc i64 %tmp5 to i32
+ br label %bb7
+
+bb7: ; preds = %bb2, %bb1
+ %tmp8 = phi i32 [ undef, %bb2 ], [ 0, %bb1 ]
+ ret void
+}
+
+; Function Attrs: nounwind readnone
+declare i64 @llvm.expect.i64(i64, i64) #1
+
+attributes #0 = { nounwind uwtable }
+attributes #1 = { nounwind readnone }
OpenPOWER on IntegriCloud