mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
[weak vtables] Remove a bunch of weak vtables
This patch removes most of the trivial cases of weak vtables by pinning them to a single object file. The memory leaks in this version have been fixed. Thanks Alexey for pointing them out. Differential Revision: http://llvm-reviews.chandlerc.com/D2068 Reviewed by Andy git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195064 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -128,7 +128,7 @@ public:
|
||||
BB(Block),PT(PT),Ran(R),Context(BB->getContext()) {}
|
||||
|
||||
/// virtual D'tor to silence warnings.
|
||||
virtual ~Modifier() {}
|
||||
virtual ~Modifier();
|
||||
|
||||
/// Add a new instruction.
|
||||
virtual void Act() = 0;
|
||||
@@ -287,6 +287,7 @@ protected:
|
||||
|
||||
struct LoadModifier: public Modifier {
|
||||
LoadModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~LoadModifier();
|
||||
virtual void Act() {
|
||||
// Try to use predefined pointers. If non exist, use undef pointer value;
|
||||
Value *Ptr = getRandomPointerValue();
|
||||
@@ -297,6 +298,7 @@ struct LoadModifier: public Modifier {
|
||||
|
||||
struct StoreModifier: public Modifier {
|
||||
StoreModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~StoreModifier();
|
||||
virtual void Act() {
|
||||
// Try to use predefined pointers. If non exist, use undef pointer value;
|
||||
Value *Ptr = getRandomPointerValue();
|
||||
@@ -315,6 +317,7 @@ struct StoreModifier: public Modifier {
|
||||
|
||||
struct BinModifier: public Modifier {
|
||||
BinModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~BinModifier();
|
||||
|
||||
virtual void Act() {
|
||||
Value *Val0 = getRandomVal();
|
||||
@@ -359,6 +362,8 @@ struct BinModifier: public Modifier {
|
||||
/// Generate constant values.
|
||||
struct ConstModifier: public Modifier {
|
||||
ConstModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~ConstModifier();
|
||||
|
||||
virtual void Act() {
|
||||
Type *Ty = pickType();
|
||||
|
||||
@@ -405,6 +410,7 @@ struct ConstModifier: public Modifier {
|
||||
|
||||
struct AllocaModifier: public Modifier {
|
||||
AllocaModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R){}
|
||||
virtual ~AllocaModifier();
|
||||
|
||||
virtual void Act() {
|
||||
Type *Tp = pickType();
|
||||
@@ -415,6 +421,7 @@ struct AllocaModifier: public Modifier {
|
||||
struct ExtractElementModifier: public Modifier {
|
||||
ExtractElementModifier(BasicBlock *BB, PieceTable *PT, Random *R):
|
||||
Modifier(BB, PT, R) {}
|
||||
virtual ~ExtractElementModifier();
|
||||
|
||||
virtual void Act() {
|
||||
Value *Val0 = getRandomVectorValue();
|
||||
@@ -428,6 +435,8 @@ struct ExtractElementModifier: public Modifier {
|
||||
|
||||
struct ShuffModifier: public Modifier {
|
||||
ShuffModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~ShuffModifier();
|
||||
|
||||
virtual void Act() {
|
||||
|
||||
Value *Val0 = getRandomVectorValue();
|
||||
@@ -456,6 +465,7 @@ struct ShuffModifier: public Modifier {
|
||||
struct InsertElementModifier: public Modifier {
|
||||
InsertElementModifier(BasicBlock *BB, PieceTable *PT, Random *R):
|
||||
Modifier(BB, PT, R) {}
|
||||
virtual ~InsertElementModifier();
|
||||
|
||||
virtual void Act() {
|
||||
Value *Val0 = getRandomVectorValue();
|
||||
@@ -472,6 +482,8 @@ struct InsertElementModifier: public Modifier {
|
||||
|
||||
struct CastModifier: public Modifier {
|
||||
CastModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~CastModifier();
|
||||
|
||||
virtual void Act() {
|
||||
|
||||
Value *V = getRandomVal();
|
||||
@@ -558,6 +570,7 @@ struct CastModifier: public Modifier {
|
||||
struct SelectModifier: public Modifier {
|
||||
SelectModifier(BasicBlock *BB, PieceTable *PT, Random *R):
|
||||
Modifier(BB, PT, R) {}
|
||||
virtual ~SelectModifier();
|
||||
|
||||
virtual void Act() {
|
||||
// Try a bunch of different select configuration until a valid one is found.
|
||||
@@ -582,6 +595,8 @@ struct SelectModifier: public Modifier {
|
||||
|
||||
struct CmpModifier: public Modifier {
|
||||
CmpModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT, R) {}
|
||||
virtual ~CmpModifier();
|
||||
|
||||
virtual void Act() {
|
||||
|
||||
Value *Val0 = getRandomVal();
|
||||
@@ -607,6 +622,20 @@ struct CmpModifier: public Modifier {
|
||||
}
|
||||
};
|
||||
|
||||
// Use out-of-line definitions to prevent weak vtables.
|
||||
Modifier::~Modifier() {}
|
||||
LoadModifier::~LoadModifier() {}
|
||||
StoreModifier::~StoreModifier() {}
|
||||
BinModifier::~BinModifier() {}
|
||||
ConstModifier::~ConstModifier() {}
|
||||
AllocaModifier::~AllocaModifier() {}
|
||||
ExtractElementModifier::~ExtractElementModifier() {}
|
||||
ShuffModifier::~ShuffModifier() {}
|
||||
InsertElementModifier::~InsertElementModifier() {}
|
||||
CastModifier::~CastModifier() {}
|
||||
SelectModifier::~SelectModifier() {}
|
||||
CmpModifier::~CmpModifier() {}
|
||||
|
||||
void FillFunction(Function *F, Random &R) {
|
||||
// Create a legal entry block.
|
||||
BasicBlock *BB = BasicBlock::Create(F->getContext(), "BB", F);
|
||||
|
Reference in New Issue
Block a user