[PATCH] llvm.noalias - ObjectSizeOffsetVisitor should look through them
hfinkel at anl.gov
hfinkel at anl.gov
Thu Apr 30 08:53:31 PDT 2015
Hi chandlerc, reames,
This is part of the series started by D9375, and teaches ObjectSizeOffsetVisitor to look through llvm.noalias when it looks through bitcasts (which is only does via an initial stripping for some reason).
http://reviews.llvm.org/D9390
Files:
lib/Analysis/ValueTracking.cpp
test/Transforms/InstCombine/strlen-1.ll
Index: lib/Analysis/ValueTracking.cpp
===================================================================
--- lib/Analysis/ValueTracking.cpp
+++ lib/Analysis/ValueTracking.cpp
@@ -2599,7 +2599,7 @@
assert(V);
// Look through bitcast instructions and geps.
- V = V->stripPointerCasts();
+ V = V->stripPointerCasts(/*LookThroughNoAlias*/true);
// If the value is a GEP instruction or constant expression, treat it as an
// offset.
@@ -2682,7 +2682,7 @@
/// the specified pointer, return 'len+1'. If we can't, return 0.
static uint64_t GetStringLengthH(Value *V, SmallPtrSetImpl<PHINode*> &PHIs) {
// Look through noop bitcast instructions.
- V = V->stripPointerCasts();
+ V = V->stripPointerCasts(/*LookThroughNoAlias*/true);
// If this is a PHI node, there are two cases: either we have already seen it
// or we haven't.
Index: test/Transforms/InstCombine/strlen-1.ll
===================================================================
--- test/Transforms/InstCombine/strlen-1.ll
+++ test/Transforms/InstCombine/strlen-1.ll
@@ -23,6 +23,15 @@
; CHECK-NEXT: ret i32 5
}
+define i32 @test_simplify1a() {
+; CHECK-LABEL: @test_simplify1a(
+ %hello_p = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
+ %hello_pa = call i8* @llvm.noalias.p0i8(i8* %hello_p, metadata !1)
+ %hello_l = call i32 @strlen(i8* %hello_pa)
+ ret i32 %hello_l
+; CHECK-NEXT: ret i32 5
+}
+
define i32 @test_simplify2() {
; CHECK-LABEL: @test_simplify2(
%null_p = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
@@ -107,3 +116,9 @@
ret i32 %a_l
; CHECK-NEXT: ret i32 %a_l
}
+
+declare i8* @llvm.noalias.p0i8(i8*, metadata) nounwind
+
+!0 = !{!0, !"some domain"}
+!1 = !{!1, !0, !"some scope"}
+
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9390.24724.patch
Type: text/x-patch
Size: 1728 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150430/3967f0d7/attachment.bin>
More information about the llvm-commits
mailing list