[polly] r305423 - Don't check side effects for functions outside of SCoP

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 14 15:43:29 PDT 2017


Author: efriedma
Date: Wed Jun 14 17:43:28 2017
New Revision: 305423

URL: http://llvm.org/viewvc/llvm-project?rev=305423&view=rev
Log:
Don't check side effects for functions outside of SCoP

In r304074 we introduce a patch to accept results from side effect free
functions into SCEV modeling. This causes rejection of cases where the
call is happening outside the SCoP. This patch checks if the call is
outside the Region and treats the results as a parameter (SCEVType::PARAM)
to the SCoP instead of returning SCEVType::INVALID.

Patch by Sameer Abu Asal.


Added:
    polly/trunk/test/ScopInfo/constant_functions_outside_scop_as_unknown.ll
Modified:
    polly/trunk/lib/Support/SCEVValidator.cpp

Modified: polly/trunk/lib/Support/SCEVValidator.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Support/SCEVValidator.cpp?rev=305423&r1=305422&r2=305423&view=diff
==============================================================================
--- polly/trunk/lib/Support/SCEVValidator.cpp (original)
+++ polly/trunk/lib/Support/SCEVValidator.cpp Wed Jun 14 17:43:28 2017
@@ -320,11 +320,12 @@ public:
   ValidatorResult visitCallInstruction(Instruction *I, const SCEV *S) {
     assert(I->getOpcode() == Instruction::Call && "Call instruction expected");
 
-    auto Call = cast<CallInst>(I);
-
-    if (!isConstCall(Call))
-      return ValidatorResult(SCEVType::INVALID, S);
+    if (R->contains(I)) {
+      auto Call = cast<CallInst>(I);
 
+      if (!isConstCall(Call))
+        return ValidatorResult(SCEVType::INVALID, S);
+    }
     return ValidatorResult(SCEVType::PARAM, S);
   }
 

Added: polly/trunk/test/ScopInfo/constant_functions_outside_scop_as_unknown.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/constant_functions_outside_scop_as_unknown.ll?rev=305423&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/constant_functions_outside_scop_as_unknown.ll (added)
+++ polly/trunk/test/ScopInfo/constant_functions_outside_scop_as_unknown.ll Wed Jun 14 17:43:28 2017
@@ -0,0 +1,36 @@
+; RUN: opt -polly-process-unprofitable -polly-scops -analyze < %s | FileCheck %s
+
+target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+
+; CHECK: Region: %for.cond62---%for.cond
+; CHECK: p0: {0,+,1}<nuw><%for.cond>
+; CHECK-NEXT: p1: %param1
+; CHECK-NEXT: p2: %param2
+; CHECK-NEXT: Arrays {
+
+define void @f(i8* %param1) {
+entry:
+  br label %for.cond
+
+for.cond:
+  %hook = phi i8* [ %param1, %entry ], [ %add.ptr201, %cleanup ]
+  br i1 undef, label %for.body, label %for.cond.cleanup
+
+for.body:
+  %param2 = call i32 @g()
+  %add.ptr60 = getelementptr inbounds i8, i8* %hook, i32 %param2
+  br label %for.cond62
+
+for.cond62:
+  %cmp64 = icmp ule i8* %add.ptr60, null
+  br i1 %cmp64, label %for.cond62, label %cleanup
+
+cleanup:
+  %add.ptr201 = getelementptr inbounds i8, i8* %hook, i32 1
+  br label %for.cond
+
+for.cond.cleanup:
+  ret void
+}
+
+declare i32 @g()




More information about the llvm-commits mailing list