Skip to content

Commit

Permalink
[GVN] Preserve !range metadata when PRE'ing loads
Browse files Browse the repository at this point in the history
Reviewers: dberlin, reames, george.burgess.iv

Subscribers: mcrosier, llvm-commits

Differential Revision: http://reviews.llvm.org/D20743

llvm-svn: 271034
  • Loading branch information
sanjoy committed May 27, 2016
1 parent a75c77b commit 6fff9dc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
2 changes: 2 additions & 0 deletions llvm/lib/Transforms/Scalar/GVN.cpp
Expand Up @@ -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());
Expand Down
24 changes: 24 additions & 0 deletions 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"}

0 comments on commit 6fff9dc

Please sign in to comment.