forked from OSchip/llvm-project
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. llvm-svn: 235770
This commit is contained in:
parent
cbc28dc549
commit
4472b776b0
|
@ -77,6 +77,16 @@ private:
|
|||
* bit 3-6: CallingConvention
|
||||
*/
|
||||
|
||||
/// Bits from GlobalObject::GlobalObjectSubclassData.
|
||||
enum {
|
||||
/// Whether this function is materializable.
|
||||
IsMaterializableBit = 1 << 0
|
||||
};
|
||||
void setGlobalObjectBit(unsigned Mask, bool Value) {
|
||||
setGlobalObjectSubClassData((~Mask & getGlobalObjectSubClassData()) |
|
||||
(Value ? Mask : 0u));
|
||||
}
|
||||
|
||||
friend class SymbolTableListTraits<Function, Module>;
|
||||
|
||||
void setParent(Module *parent);
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue