From 91e7c14953a2b18b93a7e3282956dfcbb1204874 Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Fri, 27 May 2016 19:03:10 +0000 Subject: [PATCH] [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 --- lib/Transforms/Scalar/GVN.cpp | 2 ++ test/Transforms/GVN/load-metadata.ll | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 test/Transforms/GVN/load-metadata.ll diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 97ec1eab654..5236c526e75 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/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/test/Transforms/GVN/load-metadata.ll b/test/Transforms/GVN/load-metadata.ll new file mode 100644 index 00000000000..3294cda7ee9 --- /dev/null +++ b/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"}