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
diff --git a/llvm/lib/IR/Function.cpp b/llvm/lib/IR/Function.cpp
index d3a0934..227dfef 100644
--- a/llvm/lib/IR/Function.cpp
+++ b/llvm/lib/IR/Function.cpp
@@ -206,10 +206,12 @@
//===----------------------------------------------------------------------===//
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 @@
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.