[polly] r260023 - Do not yet consider loads with non-canonical element size for load hoisting.

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 7 00:11:37 PST 2016


Author: grosser
Date: Sun Feb  7 02:11:36 2016
New Revision: 260023

URL: http://llvm.org/viewvc/llvm-project?rev=260023&view=rev
Log:
Do not yet consider loads with non-canonical element size for load hoisting.

Invariant load hoisting of memory accesses with non-canonical element
types lacks support for equivalence classes that contain elements of
different width/size. This support should be added, but to get our buildbots
back to green, we disable load hoisting for memory accesses with non-canonical
element size for now.

Added:
    polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load-2.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp
    polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load.ll

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=260023&r1=260022&r2=260023&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Sun Feb  7 02:11:36 2016
@@ -2969,6 +2969,15 @@ bool Scop::isHoistableAccess(MemoryAcces
 
   isl_map *AccessRelation = Access->getAccessRelation();
 
+  // Invariant load hoisting of memory accesses with non-canonical element
+  // types lacks support for equivalence classes that contain elements of
+  // different width/size. Hence, do not yet consider loads with non-canonical
+  // element size for load hoisting.
+  if (!isl_map_is_single_valued(AccessRelation)) {
+    isl_map_free(AccessRelation);
+    return false;
+  }
+
   // Skip accesses that have an empty access relation. These can be caused
   // by multiple offsets with a type cast in-between that cause the overall
   // byte offset to be not divisible by the new types sizes.

Added: polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load-2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load-2.ll?rev=260023&view=auto
==============================================================================
--- polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load-2.ll (added)
+++ polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load-2.ll Sun Feb  7 02:11:36 2016
@@ -0,0 +1,34 @@
+; RUN: opt %loadPolly -polly-codegen -S < %s | FileCheck %s
+
+; CHECK: polly
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @hoge(i8* %arg) #0 {
+bb:
+  br label %bb3
+
+bb3:                                              ; preds = %bb
+  %tmp = load i8, i8* %arg, align 1, !tbaa !1
+  br i1 false, label %bb7, label %bb4
+
+bb4:                                              ; preds = %bb3
+  %tmp5 = bitcast i8* %arg to i32*
+  %tmp6 = load i32, i32* %tmp5, align 4, !tbaa !4
+  br label %bb7
+
+bb7:                                              ; preds = %bb4, %bb3
+  %tmp8 = phi i8 [ 1, %bb3 ], [ undef, %bb4 ]
+  ret void
+}
+
+attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+
+!llvm.ident = !{!0}
+
+!0 = !{!"clang version 3.9.0 (trunk 259751) (llvm/trunk 259869)"}
+!1 = !{!2, !2, i64 0}
+!2 = !{!"omnipotent char", !3, i64 0}
+!3 = !{!"Simple C/C++ TBAA"}
+!4 = !{!5, !5, i64 0}
+!5 = !{!"int", !2, i64 0}

Modified: polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load.ll?rev=260023&r1=260022&r2=260023&view=diff
==============================================================================
--- polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load.ll (original)
+++ polly/trunk/test/Isl/CodeGen/multiple-types-invariant-load.ll Sun Feb  7 02:11:36 2016
@@ -1,5 +1,9 @@
 ; RUN: opt %loadPolly -polly-codegen -S < %s | FileCheck %s
 
+; Invariant loads with non-canonical types are not yet fully supported.
+
+; XFAIL: *
+
 ; CHECK: %polly.access.cast.global.load = bitcast %struct.hoge* %global.load to i32*
 ; CHECK: %polly.access.global.load = getelementptr i32, i32* %polly.access.cast.global.load, i64 0
 ; CHECK: %polly.access.global.load.load = load i32, i32* %polly.access.global.load




More information about the llvm-commits mailing list