IR: Use a bitmask to access GlobalObject subclass data

Make room for more than just `Function::isMaterializable()` in the
`GlobalObject` subclass data bitfield.  Since we're treating it like a
bitfield, change `Function::Function()` to zero-out the whole thing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235770 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2015-04-24 20:47:23 +00:00
parent 223d9cfd30
commit af8df399e1
2 changed files with 15 additions and 3 deletions

View File

@@ -206,10 +206,12 @@ void Argument::removeAttr(AttributeSet AS) {
//===----------------------------------------------------------------------===//
bool Function::isMaterializable() const {
return getGlobalObjectSubClassData();
return getGlobalObjectSubClassData() & IsMaterializableBit;
}
void Function::setIsMaterializable(bool V) { setGlobalObjectSubClassData(V); }
void Function::setIsMaterializable(bool V) {
setGlobalObjectBit(IsMaterializableBit, V);
}
LLVMContext &Function::getContext() const {
return getType()->getContext();
@@ -244,7 +246,7 @@ Function::Function(FunctionType *Ty, LinkageTypes Linkage, const Twine &name,
Ty(Ty) {
assert(FunctionType::isValidReturnType(getReturnType()) &&
"invalid return type");
setIsMaterializable(false);
setGlobalObjectSubClassData(0);
SymTab = new ValueSymbolTable();
// If the function has arguments, mark them as lazily built.