Added meta-pass that runs all of the LLVM optimisations.
parent
928e7f3971
commit
15ddbdfd71
@ -0,0 +1,54 @@
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Module.h"
|
||||
|
||||
#include "ObjectiveCOpts.h"
|
||||
|
||||
using namespace llvm;
|
||||
namespace
|
||||
{
|
||||
class ObjectiveCOpts : public ModulePass {
|
||||
ModulePass *IMPCachePass;
|
||||
ModulePass *ClassLookupCachePass;
|
||||
ModulePass *ClassMethodInliner;
|
||||
FunctionPass *GNUNonfragileIvarPass;
|
||||
FunctionPass *GNULoopIMPCachePass;
|
||||
|
||||
public:
|
||||
static char ID;
|
||||
ObjectiveCOpts() : ModulePass(ID) {
|
||||
IMPCachePass = createClassIMPCachePass();
|
||||
ClassLookupCachePass = createClassLookupCachePass();
|
||||
ClassMethodInliner = createClassMethodInliner();
|
||||
GNUNonfragileIvarPass = createGNUNonfragileIvarPass();
|
||||
GNULoopIMPCachePass = createGNULoopIMPCachePass();
|
||||
}
|
||||
virtual ~ObjectiveCOpts() {
|
||||
delete IMPCachePass;
|
||||
delete ClassMethodInliner;
|
||||
delete ClassLookupCachePass;
|
||||
delete GNULoopIMPCachePass;
|
||||
delete GNUNonfragileIvarPass;
|
||||
}
|
||||
|
||||
virtual bool runOnModule(Module &Mod) {
|
||||
bool modified;
|
||||
modified = IMPCachePass->runOnModule(Mod);
|
||||
modified |= ClassLookupCachePass->runOnModule(Mod);
|
||||
modified |= ClassMethodInliner->runOnModule(Mod);
|
||||
|
||||
for (Module::iterator F=Mod.begin(), fend=Mod.end() ;
|
||||
F != fend ; ++F) {
|
||||
|
||||
if (F->isDeclaration()) { continue; }
|
||||
modified |= GNUNonfragileIvarPass->runOnFunction(*F);
|
||||
modified |= GNULoopIMPCachePass->runOnFunction(*F);
|
||||
}
|
||||
|
||||
return modified;
|
||||
};
|
||||
};
|
||||
|
||||
char ObjectiveCOpts::ID = 0;
|
||||
RegisterPass<ObjectiveCOpts> X("gnu-objc",
|
||||
"Run all of the GNUstep Objective-C runtimm optimisations");
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
llvm::ModulePass *createClassIMPCachePass(void);
|
||||
llvm::ModulePass *createClassLookupCachePass(void);
|
||||
llvm::ModulePass *createClassMethodInliner(void);
|
||||
llvm::FunctionPass *createGNUNonfragileIvarPass(void);
|
||||
llvm::FunctionPass *createGNULoopIMPCachePass(void);
|
||||
llvm::ModulePass *createTypeFeedbackPass(void);
|
||||
llvm::ModulePass *createTypeFeedbackDrivenInlinerPass(void);
|
||||
Loading…
Reference in New Issue