mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-23 22:15:25 +00:00
Add some out-of-line virtual dtors so that the class has a "home", preventing
vtables for (e.g.) Instruction from being emitted into every .o file. llvm-svn: 28898
This commit is contained in:
parent
0a12a0f38b
commit
a396e6d9ba
@ -37,7 +37,8 @@ protected:
|
||||
StatisticBase(const char *name, const char *desc) : Name(name), Desc(desc) {
|
||||
++NumStats; // Keep track of how many stats are created...
|
||||
}
|
||||
virtual ~StatisticBase() {}
|
||||
// Out of line virtual dtor, to give the vtable etc a home.
|
||||
virtual ~StatisticBase();
|
||||
|
||||
// destroy - Called by subclass dtor so that we can still invoke virtual
|
||||
// functions on the subclass.
|
||||
|
@ -43,6 +43,9 @@ protected:
|
||||
const std::string &Name, BasicBlock *InsertAtEnd)
|
||||
: Instruction(Ty, iType, Ops, NumOps, Name, InsertAtEnd) {}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
~TerminatorInst();
|
||||
|
||||
/// Virtual methods - Terminators should overload these and provide inline
|
||||
/// overrides of non-V methods.
|
||||
virtual BasicBlock *getSuccessorV(unsigned idx) const = 0;
|
||||
@ -96,6 +99,8 @@ protected:
|
||||
: Instruction(Ty, iType, &Op, 1, Name, IAE), Op(V, this) {
|
||||
}
|
||||
public:
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
~UnaryInstruction();
|
||||
|
||||
// Transparently provide more efficient getOperand methods.
|
||||
Value *getOperand(unsigned i) const {
|
||||
|
@ -52,11 +52,9 @@ protected:
|
||||
Instruction(const Type *Ty, unsigned iType, Use *Ops, unsigned NumOps,
|
||||
const std::string &Name, BasicBlock *InsertAtEnd);
|
||||
public:
|
||||
|
||||
~Instruction() {
|
||||
assert(Parent == 0 && "Instruction still linked in the program!");
|
||||
}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
~Instruction();
|
||||
|
||||
/// mayWriteToMemory - Return true if this instruction may modify memory.
|
||||
///
|
||||
virtual bool mayWriteToMemory() const { return false; }
|
||||
|
@ -40,9 +40,10 @@ protected:
|
||||
const std::string &Name = "", Instruction *InsertBefore = 0);
|
||||
AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy, unsigned Align,
|
||||
const std::string &Name, BasicBlock *InsertAtEnd);
|
||||
|
||||
public:
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
virtual ~AllocationInst();
|
||||
|
||||
/// isArrayAllocation - Return true if there is an allocation size parameter
|
||||
/// to the allocation instruction that is not 1.
|
||||
///
|
||||
|
@ -61,6 +61,10 @@ struct StatRecord {
|
||||
|
||||
static std::vector<StatRecord> *AccumStats = 0;
|
||||
|
||||
// Out of line virtual dtor, to give the vtable etc a home.
|
||||
StatisticBase::~StatisticBase() {
|
||||
}
|
||||
|
||||
// Print information when destroyed, iff command line option is specified
|
||||
void StatisticBase::destroy() const {
|
||||
if (Enabled && hasSomeData()) {
|
||||
|
@ -43,6 +43,12 @@ Instruction::Instruction(const Type *ty, unsigned it, Use *Ops, unsigned NumOps,
|
||||
InsertAtEnd->getInstList().push_back(this);
|
||||
}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
Instruction::~Instruction() {
|
||||
assert(Parent == 0 && "Instruction still linked in the program!");
|
||||
}
|
||||
|
||||
|
||||
void Instruction::setOpcode(unsigned opc) {
|
||||
setValueType(Value::InstructionVal + opc);
|
||||
}
|
||||
|
@ -34,6 +34,8 @@ void CallSite::setCallingConv(unsigned CC) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TerminatorInst Class
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -48,6 +50,13 @@ TerminatorInst::TerminatorInst(Instruction::TermOps iType,
|
||||
: Instruction(Type::VoidTy, iType, Ops, NumOps, "", IAE) {
|
||||
}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
TerminatorInst::~TerminatorInst() {
|
||||
}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
UnaryInstruction::~UnaryInstruction() {
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -532,6 +541,10 @@ AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
|
||||
assert(Ty != Type::VoidTy && "Cannot allocate void!");
|
||||
}
|
||||
|
||||
// Out of line virtual method, so the vtable, etc has a home.
|
||||
AllocationInst::~AllocationInst() {
|
||||
}
|
||||
|
||||
bool AllocationInst::isArrayAllocation() const {
|
||||
if (ConstantUInt *CUI = dyn_cast<ConstantUInt>(getOperand(0)))
|
||||
return CUI->getValue() != 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user