[polly] r303006 - [Polly] Fix code generation of llvm.expect intrinsic

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Sun May 14 02:09:55 PDT 2017


Author: grosser
Date: Sun May 14 04:09:54 2017
New Revision: 303006

URL: http://llvm.org/viewvc/llvm-project?rev=303006&view=rev
Log:
[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 at iith.ac.in>

Tags: #polly

Differential Revision: https://reviews.llvm.org/D32992

Added:
    polly/trunk/test/CodeGen/Intrinsics/
    polly/trunk/test/CodeGen/Intrinsics/llvm-expect.ll
Modified:
    polly/trunk/lib/Support/ScopHelper.cpp

Modified: polly/trunk/lib/Support/ScopHelper.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/ScopHelper.cpp?rev=303006&r1=303005&r2=303006&view=diff
==============================================================================
--- polly/trunk/lib/Support/ScopHelper.cpp (original)
+++ polly/trunk/lib/Support/ScopHelper.cpp Sun May 14 04:09:54 2017
@@ -477,7 +477,6 @@ bool polly::isIgnoredIntrinsic(const Val
     case llvm::Intrinsic::annotation:
     case llvm::Intrinsic::donothing:
     case llvm::Intrinsic::assume:
-    case llvm::Intrinsic::expect:
     // Some debug info intrisics are supported/ignored.
     case llvm::Intrinsic::dbg_value:
     case llvm::Intrinsic::dbg_declare:

Added: polly/trunk/test/CodeGen/Intrinsics/llvm-expect.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/CodeGen/Intrinsics/llvm-expect.ll?rev=303006&view=auto
==============================================================================
--- polly/trunk/test/CodeGen/Intrinsics/llvm-expect.ll (added)
+++ polly/trunk/test/CodeGen/Intrinsics/llvm-expect.ll Sun May 14 04:09:54 2017
@@ -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 }




More information about the llvm-commits mailing list