Skip to content

Commit

Permalink
Fixed required alignment for arrays in structs (GitHub issue #64).
Browse files Browse the repository at this point in the history
  • Loading branch information
jrprice committed Oct 14, 2014
1 parent 17689f2 commit 8b6c02c
Showing 1 changed file with 8 additions and 20 deletions.
28 changes: 8 additions & 20 deletions src/core/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,16 +216,10 @@ namespace oclgrind
size_t offset = 0;
for (int i = 0; i <= index; i++)
{
size_t size = getTypeSize(type->getStructElementType(i));

// Get member alignment
size_t align = size;
if (type->getStructElementType(i)->isArrayTy())
{
// Use element type for arrays
align =
getTypeSize(type->getStructElementType(i)->getArrayElementType());
}
// Get member size and alignment
const llvm::Type *elemType = type->getStructElementType(i);
size_t size = getTypeSize(elemType);
size_t align = getTypeAlignment(elemType);

// Add padding if necessary
if (!packed && offset % align)
Expand Down Expand Up @@ -260,16 +254,10 @@ namespace oclgrind
size_t alignment = 1;
for (int i = 0; i < type->getStructNumElements(); i++)
{
size_t sz = getTypeSize(type->getStructElementType(i));

// Get member alignment
size_t align = sz;
if (type->getStructElementType(i)->isArrayTy())
{
// Use element type for arrays
align =
getTypeSize(type->getStructElementType(i)->getArrayElementType());
}
// Get member size and alignment
const llvm::Type *elemType = type->getStructElementType(i);
size_t sz = getTypeSize(elemType);
size_t align = getTypeAlignment(elemType);

// Add padding if necessary
if (!packed && size % align)
Expand Down

0 comments on commit 8b6c02c

Please sign in to comment.