[llvm] r271034 - [GVN] Preserve !range metadata when PRE'ing loads

Sanjoy Das via llvm-commits llvm-commits at lists.llvm.org
Fri May 27 12:03:11 PDT 2016


Author: sanjoy
Date: Fri May 27 14:03:10 2016
New Revision: 271034

URL: http://llvm.org/viewvc/llvm-project?rev=271034&view=rev
Log:
[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

Added:
    llvm/trunk/test/Transforms/GVN/load-metadata.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/GVN.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=271034&r1=271033&r2=271034&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri May 27 14:03:10 2016
@@ -1567,6 +1567,8 @@ bool GVN::PerformLoadPRE(LoadInst *LI, A
       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());

Added: llvm/trunk/test/Transforms/GVN/load-metadata.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/load-metadata.ll?rev=271034&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/GVN/load-metadata.ll (added)
+++ llvm/trunk/test/Transforms/GVN/load-metadata.ll Fri May 27 14:03:10 2016
@@ -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"}




More information about the llvm-commits mailing list