[polly] r292147 - Add test showing the update of access functions with in-scop defined base ptrs

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 16 09:51:29 PST 2017


Author: grosser
Date: Mon Jan 16 11:51:28 2017
New Revision: 292147

URL: http://llvm.org/viewvc/llvm-project?rev=292147&view=rev
Log:
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.

Added:
    polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr.ll
    polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr___%loop---%exit.jscop

Added: polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr.ll?rev=292147&view=auto
==============================================================================
--- polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr.ll (added)
+++ polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr.ll Mon Jan 16 11:51:28 2017
@@ -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
+}

Added: polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr___%loop---%exit.jscop
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr___%25loop---%25exit.jscop?rev=292147&view=auto
==============================================================================
--- polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr___%loop---%exit.jscop (added)
+++ polly/trunk/test/Isl/CodeGen/MemAccess/invariant_base_ptr___%loop---%exit.jscop Mon Jan 16 11:51:28 2017
@@ -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] }"
+      }
+   ]
+}




More information about the llvm-commits mailing list