summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-05-27 19:03:10 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-05-27 19:03:10 +0000
commit6fff9dc932a708d0a5c78073e855f94990bffffc (patch)
tree31e7537325aa0128d0aff00bd22914694d4587d0 /llvm
parenta75c77b127784476900e9d0c302aea026e039221 (diff)
downloadbcm5719-llvm-6fff9dc932a708d0a5c78073e855f94990bffffc.tar.gz
bcm5719-llvm-6fff9dc932a708d0a5c78073e855f94990bffffc.zip
[GVN] Preserve !range metadata when PRE'ing loads
Reviewers: dberlin, reames, george.burgess.iv Subscribers: mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D20743 llvm-svn: 271034
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Transforms/Scalar/GVN.cpp2
-rw-r--r--llvm/test/Transforms/GVN/load-metadata.ll24
2 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp
index 97ec1eab654..5236c526e75 100644
--- a/llvm/lib/Transforms/Scalar/GVN.cpp
+++ b/llvm/lib/Transforms/Scalar/GVN.cpp
@@ -1567,6 +1567,8 @@ bool GVN::PerformLoadPRE(LoadInst *LI, AvailValInBlkVect &ValuesPerBlock,
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());
diff --git a/llvm/test/Transforms/GVN/load-metadata.ll b/llvm/test/Transforms/GVN/load-metadata.ll
new file mode 100644
index 00000000000..3294cda7ee9
--- /dev/null
+++ b/llvm/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"}
OpenPOWER on IntegriCloud