mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
Add -O1/2/3 to bugpoint, so when you conclude opt -O2 reproduces an issue, you can just run bugpoint -O2. :) My implementation isn't precisely equivalent to what opt does, but as far as I can tell, it's close enough.
llvm-svn: 132695
This commit is contained in:
parent
2d681a2ec9
commit
f6e72fc114
@ -69,6 +69,18 @@ static cl::opt<bool>
|
||||
StandardLinkOpts("std-link-opts",
|
||||
cl::desc("Include the standard link time optimizations"));
|
||||
|
||||
static cl::opt<bool>
|
||||
OptLevelO1("O1",
|
||||
cl::desc("Optimization level 1. Similar to llvm-gcc -O1"));
|
||||
|
||||
static cl::opt<bool>
|
||||
OptLevelO2("O2",
|
||||
cl::desc("Optimization level 2. Similar to llvm-gcc -O2"));
|
||||
|
||||
static cl::opt<bool>
|
||||
OptLevelO3("O3",
|
||||
cl::desc("Optimization level 3. Similar to llvm-gcc -O3"));
|
||||
|
||||
static cl::opt<std::string>
|
||||
OverrideTriple("mtriple", cl::desc("Override target triple for module"));
|
||||
|
||||
@ -83,10 +95,10 @@ static void BugpointInterruptFunction() {
|
||||
|
||||
// Hack to capture a pass list.
|
||||
namespace {
|
||||
class AddToDriver : public PassManager {
|
||||
class AddToDriver : public FunctionPassManager {
|
||||
BugDriver &D;
|
||||
public:
|
||||
AddToDriver(BugDriver &_D) : D(_D) {}
|
||||
AddToDriver(BugDriver &_D) : FunctionPassManager(0), D(_D) {}
|
||||
|
||||
virtual void add(Pass *P) {
|
||||
const void *ID = P->getPassID();
|
||||
@ -158,6 +170,20 @@ int main(int argc, char **argv) {
|
||||
/*RunInliner=*/true);
|
||||
}
|
||||
|
||||
if (OptLevelO1 || OptLevelO2 || OptLevelO3) {
|
||||
PassManagerBuilder Builder;
|
||||
if (OptLevelO1)
|
||||
Builder.Inliner = createAlwaysInlinerPass();
|
||||
else if (OptLevelO2)
|
||||
Builder.Inliner = createFunctionInliningPass(225);
|
||||
else
|
||||
Builder.Inliner = createFunctionInliningPass(275);
|
||||
|
||||
// Note that although clang/llvm-gcc use two separate passmanagers
|
||||
// here, it shouldn't normally make a difference.
|
||||
Builder.populateFunctionPassManager(PM);
|
||||
Builder.populateModulePassManager(PM);
|
||||
}
|
||||
|
||||
for (std::vector<const PassInfo*>::iterator I = PassList.begin(),
|
||||
E = PassList.end();
|
||||
|
Loading…
Reference in New Issue
Block a user