Added meta-pass that runs all of the LLVM optimisations.

main
theraven 15 years ago
parent 928e7f3971
commit 15ddbdfd71

@ -128,7 +128,7 @@ namespace
virtual bool runOnModule(Module &Mod) {
statics.empty();
M = &Mod;
bool modified;
bool modified = false;
for (Module::iterator F=Mod.begin(), fend=Mod.end() ;
F != fend ; ++F) {

@ -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…
Cancel
Save