https://llvm.org/bugs/show_bug.cgi?id=25505
Bug ID: 25505 Summary: [Polly] Loop invariant code motion, structures and non-power-of-two types cause miscompile Product: Projects Version: unspecified Hardware: PC OS: Linux Status: NEW Severity: normal Priority: P Component: Polly Assignee: polly-...@googlegroups.com Reporter: tob...@grosser.es CC: llvm-bugs@lists.llvm.org Classification: Unclassified With 252860 Polly currently miscompiles LNT MultiSource/Applications/obsequi. The miscompilation is in hash.c:hashlookup at the last LOOKUP_ENTRY(g_flipVH_hashkey) call. Two issues I see: 1) We hoist loads from Non-Affine Region Statements. For such statements we do not necessarily know that loads will be executed, hence hoisting them may cause segfaults (may not be part of the issue here) 2) When creating access locations we generate incorrect code in case number of bytes and actual allocation size of a type do not match. Below is a patch that might fix this, but it has not yet been properly tested and is possibly incomplete. @@ -171,6 +171,18 @@ Value *IslExprBuilder::createAccessAddress(isl_ast_expr *Expr) { Builder.CreateMul(IndexOp, DimSize, "polly.access.mul." + BaseName); } + auto &DL = + Builder.GetInsertBlock()->getParent()->getParent()->getDataLayout(); + unsigned int StorageSize = DL.getTypeAllocSize(SAI->getElementType()); + unsigned int ElementSize = SAI->getElemSizeInBytes(); + if (!SAI->getElementType()->isPointerTy() && ElementSize != StorageSize) { + Value *ElementValue = Builder.getInt8(ElementSize); + Value *StorageValue = Builder.getInt8(StorageSize); + ElementValue = Builder.CreateSExt(ElementValue, IndexOp->getType()); + StorageValue = Builder.CreateSExt(StorageValue, IndexOp->getType()); + IndexOp = Builder.CreateMul(IndexOp, ElementValue); + IndexOp = Builder.CreateSDiv(IndexOp, StorageValue); + } This patch prevents us from segfaulting for this test case. 3) Even with this patch applied, we still miscompile the test case. I have no idea what is going on. I need to move to other stuff know, but if someone could have a look that would be appreciated. -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs