Fix two compile time errors to allow SOA pointer and array be passed as function argument.

This commit is contained in:
Peng Tu
2012-12-11 17:20:15 -08:00
parent 16b0806d40
commit 6ba7368ab0
4 changed files with 10 additions and 5 deletions

View File

@@ -456,7 +456,7 @@ Declarator::InitFromType(const Type *baseType, DeclSpecs *ds) {
return; return;
} }
decl->type = PointerType::GetUniform(targetType); decl->type = PointerType::GetUniform(targetType, at->IsSOAType());
// Make sure there are no unsized arrays (other than the // Make sure there are no unsized arrays (other than the
// first dimension) in function parameter lists. // first dimension) in function parameter lists.

View File

@@ -808,7 +808,12 @@ Module::AddFunctionDeclaration(const std::string &name,
// uniform pointers, since varying pointers are int vectors...) // uniform pointers, since varying pointers are int vectors...)
if (!functionType->isTask && if (!functionType->isTask &&
((CastType<PointerType>(argType) != NULL && ((CastType<PointerType>(argType) != NULL &&
argType->IsUniformType()) || argType->IsUniformType() &&
// Exclude SOA argument because it is a pair {struct *, int}
// instead of pointer
!CastType<PointerType>(argType)->IsSlice())
||
CastType<ReferenceType>(argType) != NULL)) { CastType<ReferenceType>(argType) != NULL)) {
// NOTE: LLVM indexes function parameters starting from 1. // NOTE: LLVM indexes function parameters starting from 1.

View File

@@ -874,8 +874,8 @@ PointerType::PointerType(const Type *t, Variability v, bool ic, bool is,
PointerType * PointerType *
PointerType::GetUniform(const Type *t) { PointerType::GetUniform(const Type *t, bool is) {
return new PointerType(t, Variability(Variability::Uniform), false); return new PointerType(t, Variability(Variability::Uniform), false, is);
} }

2
type.h
View File

@@ -430,7 +430,7 @@ public:
bool isSlice = false, bool frozen = false); bool isSlice = false, bool frozen = false);
/** Helper method to return a uniform pointer to the given type. */ /** Helper method to return a uniform pointer to the given type. */
static PointerType *GetUniform(const Type *t); static PointerType *GetUniform(const Type *t, bool isSlice = false);
/** Helper method to return a varying pointer to the given type. */ /** Helper method to return a varying pointer to the given type. */
static PointerType *GetVarying(const Type *t); static PointerType *GetVarying(const Type *t);