[PATCH] D9377: llvm.noalias - don't block EarlyCSE
Hal Finkel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 14 19:50:20 PDT 2017
hfinkel updated this revision to Diff 111116.
hfinkel added a comment.
Rebased.
https://reviews.llvm.org/D9377
Files:
lib/Transforms/Scalar/EarlyCSE.cpp
test/Transforms/EarlyCSE/basic.ll
Index: test/Transforms/EarlyCSE/basic.ll
===================================================================
--- test/Transforms/EarlyCSE/basic.ll
+++ test/Transforms/EarlyCSE/basic.ll
@@ -54,6 +54,16 @@
; CHECK: ret i32 0
}
+; CHECK-LABEL: @test2b(
+define i32 @test2b(i32 *%P, i1 %b) {
+ %V1 = load i32, i32* %P
+ call i8* @llvm.noalias.p0i8(i8* undef, metadata !1)
+ %V2 = load i32, i32* %P
+ %Diff = sub i32 %V1, %V2
+ ret i32 %Diff
+ ; CHECK: ret i32 0
+}
+
;; Cross block load value numbering.
; CHECK-LABEL: @test3(
define i32 @test3(i32 *%P, i1 %Cond) {
@@ -134,6 +144,15 @@
; CHECK: ret i32 42
}
+; CHECK-LABEL: @test6b(
+define i32 @test6b(i32 *%P, i1 %b) {
+ store i32 42, i32* %P
+ call i8* @llvm.noalias.p0i8(i8* undef, metadata !1)
+ %V1 = load i32, i32* %P
+ ret i32 %V1
+ ; CHECK: ret i32 42
+}
+
;; Trivial dead store elimination.
; CHECK-LABEL: @test7(
define void @test7(i32 *%P) {
@@ -291,3 +310,8 @@
store i32 2, i32* @c, align 4
ret void
}
+
+declare i8* @llvm.noalias.p0i8(i8*, metadata) nounwind
+
+!0 = !{!0, !"some domain"}
+!1 = !{!1, !0, !"some scope"}
Index: lib/Transforms/Scalar/EarlyCSE.cpp
===================================================================
--- lib/Transforms/Scalar/EarlyCSE.cpp
+++ lib/Transforms/Scalar/EarlyCSE.cpp
@@ -663,6 +663,12 @@
continue;
}
+ // Likewise, noalias intrinsics don't actually write.
+ if (match(Inst, m_Intrinsic<Intrinsic::noalias>())) {
+ DEBUG(dbgs() << "EarlyCSE skipping intrinsic: " << *Inst << '\n');
+ continue;
+ }
+
// Skip invariant.start intrinsics since they only read memory, and we can
// forward values across it. Also, we dont need to consume the last store
// since the semantics of invariant.start allow us to perform DSE of the
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9377.111116.patch
Type: text/x-patch
Size: 1807 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170815/376c8b37/attachment.bin>
More information about the llvm-commits
mailing list