forked from OSchip/llvm-project
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:
parent
41a93a3edf
commit
eec7f6daa1
|
@ -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
|
||||
}
|
|
@ -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] }"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue