forked from OSchip/llvm-project
Add support for encoding a OCUVectorComponent into a single integer.
llvm-svn: 40768
This commit is contained in:
parent
30709dc432
commit
885b4959b6
|
@ -611,3 +611,20 @@ bool OCUVectorComponent::containsDuplicateComponents() const {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// getEncodedElementAccess - We encode fields with two bits per component.
|
||||
unsigned OCUVectorComponent::getEncodedElementAccess() const {
|
||||
const char *compStr = Accessor.getName();
|
||||
unsigned length = strlen(compStr);
|
||||
|
||||
unsigned Result = 0;
|
||||
|
||||
while (length--) {
|
||||
Result <<= 2;
|
||||
int Idx = OCUVectorType::getAccessorIdx(compStr[length]);
|
||||
assert(Idx != -1 && "Invalid accessor letter");
|
||||
Result |= Idx;
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
|
|
@ -494,6 +494,18 @@ public:
|
|||
/// repeated.
|
||||
bool containsDuplicateComponents() const;
|
||||
|
||||
/// getEncodedElementAccess - Encode the elements accessed into a bit vector.
|
||||
/// The encoding currently uses 2-bit bitfields, but clients should use the
|
||||
/// accessors below to access them.
|
||||
///
|
||||
unsigned getEncodedElementAccess() const;
|
||||
|
||||
/// getAccessedFieldNo - Given an encoded value and a result number, return
|
||||
/// the input field number being accessed.
|
||||
static unsigned getAccessedFieldNo(unsigned Idx, unsigned EncodedVal) {
|
||||
return (EncodedVal >> (Idx*2)) & 3;
|
||||
}
|
||||
|
||||
virtual SourceRange getSourceRange() const {
|
||||
return SourceRange(getBase()->getLocStart(), AccessorLoc);
|
||||
}
|
||||
|
|
|
@ -544,12 +544,15 @@ public:
|
|||
case 'q': return 3;
|
||||
}
|
||||
};
|
||||
|
||||
static int getAccessorIdx(char c) {
|
||||
if (int idx = getPointAccessorIdx(c)+1) return idx-1;
|
||||
if (int idx = getColorAccessorIdx(c)+1) return idx-1;
|
||||
return getTextureAccessorIdx(c);
|
||||
}
|
||||
|
||||
bool isAccessorWithinNumElements(char c) const {
|
||||
if (int idx = getPointAccessorIdx(c)+1)
|
||||
return unsigned(idx-1) < NumElements;
|
||||
if (int idx = getColorAccessorIdx(c)+1)
|
||||
return unsigned(idx-1) < NumElements;
|
||||
if (int idx = getTextureAccessorIdx(c)+1)
|
||||
if (int idx = getAccessorIdx(c)+1)
|
||||
return unsigned(idx-1) < NumElements;
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue