[PATCH] D9381: llvm.noalias - SCEV can look through it
Hal Finkel via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 8 16:04:54 PDT 2016
hfinkel updated this revision to Diff 63349.
hfinkel added a comment.
Herald added subscribers: mzolotukhin, mcrosier.
Rebased (and removed an unintentional whitespace change).
http://reviews.llvm.org/D9381
Files:
lib/Analysis/ScalarEvolution.cpp
test/Analysis/ScalarEvolution/noalias.ll
Index: test/Analysis/ScalarEvolution/noalias.ll
===================================================================
--- /dev/null
+++ test/Analysis/ScalarEvolution/noalias.ll
@@ -0,0 +1,18 @@
+; RUN: opt < %s -S -analyze -scalar-evolution | FileCheck %s
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+
+define i8* @foo(i32 %no, i8* nocapture %d) nounwind {
+entry:
+ %v = call i8* @llvm.noalias.p0i8(i8* %d, metadata !1)
+ %w = getelementptr i8, i8* %v, i64 5
+ ret i8* %w
+}
+
+; CHECK-LABEL: Classifying expressions for: @foo
+; CHECK: %w = getelementptr i8, i8* %v, i64 5
+; CHECK-NEXT: (5 + %d)
+
+declare i8* @llvm.noalias.p0i8(i8*, metadata) nounwind argmemonly
+
+!0 = !{!0, !"some domain"}
+!1 = !{!1, !0, !"some scope"}
Index: lib/Analysis/ScalarEvolution.cpp
===================================================================
--- lib/Analysis/ScalarEvolution.cpp
+++ lib/Analysis/ScalarEvolution.cpp
@@ -80,6 +80,8 @@
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
+#include "llvm/IR/IntrinsicInst.h"
+#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Operator.h"
@@ -5225,6 +5227,15 @@
if (isa<Instruction>(U))
return createNodeForSelectOrPHI(cast<Instruction>(U), U->getOperand(0),
U->getOperand(1), U->getOperand(2));
+ break;
+
+ case Instruction::Call:
+ if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(U)) {
+ if (II->getIntrinsicID() == Intrinsic::noalias)
+ return getSCEV(U->getOperand(0));
+ }
+
+ break;
}
return getUnknown(V);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9381.63349.patch
Type: text/x-patch
Size: 1769 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160708/6e5348c0/attachment.bin>
More information about the llvm-commits
mailing list