[polly] r265834 - [FIX] Do not crash on opaque (unsized) types.
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 8 12:20:04 PDT 2016
Author: jdoerfert
Date: Fri Apr 8 14:20:03 2016
New Revision: 265834
URL: http://llvm.org/viewvc/llvm-project?rev=265834&view=rev
Log:
[FIX] Do not crash on opaque (unsized) types.
Added:
polly/trunk/test/ScopInfo/opaque-struct.ll
Modified:
polly/trunk/lib/Analysis/ScopInfo.cpp
Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=265834&r1=265833&r2=265834&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Fri Apr 8 14:20:03 2016
@@ -3992,6 +3992,11 @@ bool ScopInfo::buildAccessMultiDimFixed(
auto *Src = BitCast->getOperand(0);
auto *SrcTy = Src->getType();
auto *DstTy = BitCast->getType();
+ // Do not try to delinearize non-sized (opaque) pointers.
+ if ((SrcTy->isPointerTy() && !SrcTy->getPointerElementType()->isSized()) ||
+ (DstTy->isPointerTy() && !DstTy->getPointerElementType()->isSized())) {
+ return false;
+ }
if (SrcTy->isPointerTy() && DstTy->isPointerTy() &&
DL->getTypeAllocSize(SrcTy->getPointerElementType()) ==
DL->getTypeAllocSize(DstTy->getPointerElementType()))
Added: polly/trunk/test/ScopInfo/opaque-struct.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/opaque-struct.ll?rev=265834&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/opaque-struct.ll (added)
+++ polly/trunk/test/ScopInfo/opaque-struct.ll Fri Apr 8 14:20:03 2016
@@ -0,0 +1,25 @@
+; RUN: opt %loadPolly -polly-scops -disable-output < %s
+;
+; Check that we do not crash with unsized (opaque) types.
+;
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+%struct.s3 = type opaque
+%struct.stmt = type opaque
+
+; Function Attrs: nounwind uwtable
+define void @columnMem(%struct.stmt* %pStmt) #0 {
+entry:
+ br label %if.else
+
+if.else: ; preds = %entry
+ %db = bitcast %struct.stmt* %pStmt to %struct.s3**
+ %0 = load %struct.s3*, %struct.s3** %db, align 8
+ br i1 false, label %if.end9, label %if.then7
+
+if.then7: ; preds = %if.else
+ br label %if.end9
+
+if.end9: ; preds = %if.then7, %if.else
+ ret void
+}
More information about the llvm-commits
mailing list