<div dir="ltr">LGTM</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 27, 2016 at 11:47 AM, Sanjoy Das <span dir="ltr"><<a href="mailto:sanjoy@playingwithpointers.com" target="_blank">sanjoy@playingwithpointers.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">sanjoy created this revision.<br>
sanjoy added reviewers: dberlin, reames, george.burgess.iv.<br>
sanjoy added a subscriber: llvm-commits.<br>
Herald added a subscriber: mcrosier.<br>
<br>
<a href="http://reviews.llvm.org/D20743" rel="noreferrer" target="_blank">http://reviews.llvm.org/D20743</a><br>
<br>
Files:<br>
  lib/Transforms/Scalar/GVN.cpp<br>
  test/Transforms/GVN/load-metadata.ll<br>
<br>
Index: test/Transforms/GVN/load-metadata.ll<br>
===================================================================<br>
--- /dev/null<br>
+++ test/Transforms/GVN/load-metadata.ll<br>
@@ -0,0 +1,24 @@<br>
+; RUN: opt -S -gvn < %s | FileCheck %s<br>
+<br>
+define i32 @test1(i32* %p, i1 %C) {<br>
+; CHECK-LABEL: @test1(<br>
+block1:<br>
+       br i1 %C, label %block2, label %block3<br>
+<br>
+block2:<br>
+ br label %block4<br>
+; CHECK: block2:<br>
+; CHECK-NEXT: load i32, i32* %p, !range !0, !invariant.group !1<br>
+<br>
+block3:<br>
+  store i32 0, i32* %p<br>
+  br label %block4<br>
+<br>
+block4:<br>
+  %PRE = load i32, i32* %p, !range !0, !invariant.group !1<br>
+  ret i32 %PRE<br>
+}<br>
+<br>
+<br>
+!0 = !{i32 40, i32 100}<br>
+!1 = !{!"magic ptr"}<br>
Index: lib/Transforms/Scalar/GVN.cpp<br>
===================================================================<br>
--- lib/Transforms/Scalar/GVN.cpp<br>
+++ lib/Transforms/Scalar/GVN.cpp<br>
@@ -1567,6 +1567,8 @@<br>
       NewLoad->setMetadata(LLVMContext::MD_invariant_load, MD);<br>
     if (auto *InvGroupMD = LI->getMetadata(LLVMContext::MD_invariant_group))<br>
       NewLoad->setMetadata(LLVMContext::MD_invariant_group, InvGroupMD);<br>
+    if (auto *RangeMD = LI->getMetadata(LLVMContext::MD_range))<br>
+      NewLoad->setMetadata(LLVMContext::MD_range, RangeMD);<br>
<br>
     // Transfer DebugLoc.<br>
     NewLoad->setDebugLoc(LI->getDebugLoc());<br>
<br>
<br>
</blockquote></div><br></div>