[ScopDetect] Conservatively handle inaccessible memory alias attributes
authorTobias Grosser <tobias@grosser.es>
Sun, 13 Nov 2016 19:27:24 +0000 (19:27 +0000)
committerTobias Grosser <tobias@grosser.es>
Sun, 13 Nov 2016 19:27:24 +0000 (19:27 +0000)
Commit r286294 introduced support for inaccessiblememonly and
inaccessiblemem_or_argmemonly attributes to BasicAA, which we need to
support to avoid undefined behavior. This change just refuses all calls
which are annotated with these attributes, which is conservatively correct.
In the future we may consider to model and support such function calls
in Polly.

llvm-svn: 286771

polly/lib/Analysis/ScopBuilder.cpp
polly/lib/Analysis/ScopDetection.cpp

index a38629e..0e03118 100644 (file)
@@ -322,6 +322,8 @@ bool ScopBuilder::buildAccessCallInst(MemAccInst Inst, Loop *L) {
   case llvm::FMRB_DoesNotAccessMemory:
     return true;
   case llvm::FMRB_DoesNotReadMemory:
+  case llvm::FMRB_OnlyAccessesInaccessibleMem:
+  case llvm::FMRB_OnlyAccessesInaccessibleOrArgMem:
     return false;
   case llvm::FMRB_OnlyReadsMemory:
     GlobalReads.push_back(CI);
index a34c4ed..d23b9d5 100644 (file)
@@ -491,6 +491,8 @@ bool ScopDetection::isValidCallInst(CallInst &CI,
       Context.AST.add(&CI);
       return true;
     case FMRB_DoesNotReadMemory:
+    case FMRB_OnlyAccessesInaccessibleMem:
+    case FMRB_OnlyAccessesInaccessibleOrArgMem:
       return false;
     }
   }