Map the new load to the base pointer of the invariant load hoisted load

Map the new load to the base pointer of the invariant load hoisted load
to be able to find the alias information for it.

Reviewed-by: Tobias Grosser <tobias@grosser.es>

Differential Revision: https://reviews.llvm.org/D30605

llvm-svn: 298507
This commit is contained in:
Roman Gareev 2017-03-22 13:57:53 +00:00
parent f4b9da6286
commit 23df27682a
2 changed files with 35 additions and 0 deletions

View File

@ -1211,6 +1211,9 @@ bool IslNodeBuilder::preloadInvariantEquivClass(
auto *Alloca = new AllocaInst(AccInstTy, AccInst->getName() + ".preload.s2a");
Alloca->insertBefore(&*EntryBB->getFirstInsertionPt());
Builder.CreateStore(PreloadVal, Alloca);
ValueMapT PreloadedPointer;
PreloadedPointer[PreloadVal] = AccInst;
Annotator.addAlternativeAliasBases(PreloadedPointer);
for (auto *DerivedSAI : SAI->getDerivedSAIs()) {
Value *BasePtr = DerivedSAI->getBasePtr();

View File

@ -0,0 +1,32 @@
; RUN: opt %loadPolly -polly-codegen -polly-invariant-load-hoisting=true \
; RUN: -S < %s | FileCheck %s
;
; This test case checks whether Polly generates alias metadata in case of
; the ublas gemm kernel and polly-invariant-load-hoisting.
;
; CHECK: store float 4.200000e+01, float* %polly.access.A.load, !alias.scope !3, !noalias !4
;
; CHECK: !0 = distinct !{!0, !1, !"polly.alias.scope.MemRef_A"}
; CHECK-NEXT: !1 = distinct !{!1, !"polly.alias.scope.domain"}
; CHECK-NEXT: !2 = !{!3}
; CHECK-NEXT: !3 = distinct !{!3, !1, !"polly.alias.scope.MemRef_ptrA"}
; CHECK-NEXT: !4 = !{!0}
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @nometadata(float** %A) {
entry:
br label %for
for:
%indvar = phi i64 [0, %entry], [%indvar.next, %for]
%indvar.next = add i64 %indvar, 1
%ptrA = load float*, float** %A
store float 42.0, float* %ptrA
%icmp = icmp sle i64 %indvar, 1024
br i1 %icmp, label %for, label %exit
exit:
ret void
}