[PATCH] D20743: [GVN] Preserve !range metadata when PRE'ing loads
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Fri May 27 11:47:29 PDT 2016
sanjoy created this revision.
sanjoy added reviewers: dberlin, reames, george.burgess.iv.
sanjoy added a subscriber: llvm-commits.
Herald added a subscriber: mcrosier.
http://reviews.llvm.org/D20743
Files:
lib/Transforms/Scalar/GVN.cpp
test/Transforms/GVN/load-metadata.ll
Index: test/Transforms/GVN/load-metadata.ll
===================================================================
--- /dev/null
+++ test/Transforms/GVN/load-metadata.ll
@@ -0,0 +1,24 @@
+; RUN: opt -S -gvn < %s | FileCheck %s
+
+define i32 @test1(i32* %p, i1 %C) {
+; CHECK-LABEL: @test1(
+block1:
+ br i1 %C, label %block2, label %block3
+
+block2:
+ br label %block4
+; CHECK: block2:
+; CHECK-NEXT: load i32, i32* %p, !range !0, !invariant.group !1
+
+block3:
+ store i32 0, i32* %p
+ br label %block4
+
+block4:
+ %PRE = load i32, i32* %p, !range !0, !invariant.group !1
+ ret i32 %PRE
+}
+
+
+!0 = !{i32 40, i32 100}
+!1 = !{!"magic ptr"}
Index: lib/Transforms/Scalar/GVN.cpp
===================================================================
--- lib/Transforms/Scalar/GVN.cpp
+++ lib/Transforms/Scalar/GVN.cpp
@@ -1567,6 +1567,8 @@
NewLoad->setMetadata(LLVMContext::MD_invariant_load, MD);
if (auto *InvGroupMD = LI->getMetadata(LLVMContext::MD_invariant_group))
NewLoad->setMetadata(LLVMContext::MD_invariant_group, InvGroupMD);
+ if (auto *RangeMD = LI->getMetadata(LLVMContext::MD_range))
+ NewLoad->setMetadata(LLVMContext::MD_range, RangeMD);
// Transfer DebugLoc.
NewLoad->setDebugLoc(LI->getDebugLoc());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20743.58818.patch
Type: text/x-patch
Size: 1259 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160527/e0822b10/attachment.bin>
More information about the llvm-commits
mailing list