Add test showing the update of access functions with in-scop defined base ptrs

This feature is currently not supported and an explicit assert to prevent the
introduction of such accesses has been added in r282893. This test case allows
to reproduce the assert (and without the assert the miscompile) added in
r282893. It will help when adding such support at some point.

llvm-svn: 292147
This commit is contained in:
Tobias Grosser 2017-01-16 17:51:28 +00:00
parent 41a93a3edf
commit eec7f6daa1
2 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,41 @@
; RUN: opt %loadPolly -polly-import-jscop -polly-import-jscop-dir=%S \
; RUN: -polly-codegen -analyze 2 >&1 < %s | FileCheck %s
; XFAIL: *
; Setting new access functions where the base pointer of the array that is newly
; accessed is only loaded within the scop itself caused incorrect code to be
; generated when invariant load hoisting is disabled. Since r282893 we assert
; in such situations. This test case was added to demonstrate what needs to be
; resolved to support such access functions.
define void @invariant_base_ptr(float* noalias %Array, float** noalias %X,
float* noalias %C) {
start:
br label %loop
loop:
%indvar = phi i64 [0, %start], [%indvar.next, %latch]
%indvar.next = add i64 %indvar, 1
%cmp = icmp slt i64 %indvar, 1024
br i1 %cmp, label %body, label %exit
body:
%gep= getelementptr float, float* %Array, i64 %indvar
store float 42.0, float* %gep
br label %body2
body2:
%Base = load float*, float** %X
%gep2 = getelementptr float, float* %Base, i64 %indvar
%val2 = load float, float* %gep2
store float %val2, float* %C
br label %latch
latch:
br label %loop
exit:
ret void
}

View File

@ -0,0 +1,54 @@
{
"arrays" : [
{
"name" : "MemRef_Array",
"sizes" : [ "*" ],
"type" : "float"
},
{
"name" : "MemRef_X",
"sizes" : [ "*" ],
"type" : "float*"
},
{
"name" : "MemRef_Base",
"sizes" : [ "*" ],
"type" : "float"
},
{
"name" : "MemRef_C",
"sizes" : [ "*" ],
"type" : "float"
}
],
"context" : "{ : }",
"name" : "%loop---%exit",
"statements" : [
{
"accesses" : [
{
"kind" : "write",
"relation" : "{ Stmt_body[i0] -> MemRef_Base[i0] }"
}
],
"domain" : "{ Stmt_body[i0] : 0 <= i0 <= 1023 }",
"name" : "Stmt_body",
"schedule" : "{ Stmt_body[i0] -> [i0, 0] }"
},
{
"accesses" : [
{
"kind" : "read",
"relation" : "{ Stmt_body2[i0] -> MemRef_Base[i0] }"
},
{
"kind" : "write",
"relation" : "{ Stmt_body2[i0] -> MemRef_C[0] }"
}
],
"domain" : "{ Stmt_body2[i0] : 0 <= i0 <= 1023 }",
"name" : "Stmt_body2",
"schedule" : "{ Stmt_body2[i0] -> [i0, 1] }"
}
]
}