Deleted Added
full compact
BugDriver.cpp (218885) BugDriver.cpp (221337)
1//===- BugDriver.cpp - Top-Level BugPoint class implementation ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 57 unchanged lines hidden (view full) ---

66 return Result;
67}
68
69BugDriver::BugDriver(const char *toolname, bool find_bugs,
70 unsigned timeout, unsigned memlimit, bool use_valgrind,
71 LLVMContext& ctxt)
72 : Context(ctxt), ToolName(toolname), ReferenceOutputFile(OutputFile),
73 Program(0), Interpreter(0), SafeInterpreter(0), gcc(0),
1//===- BugDriver.cpp - Top-Level BugPoint class implementation ------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 57 unchanged lines hidden (view full) ---

66 return Result;
67}
68
69BugDriver::BugDriver(const char *toolname, bool find_bugs,
70 unsigned timeout, unsigned memlimit, bool use_valgrind,
71 LLVMContext& ctxt)
72 : Context(ctxt), ToolName(toolname), ReferenceOutputFile(OutputFile),
73 Program(0), Interpreter(0), SafeInterpreter(0), gcc(0),
74 run_find_bugs(find_bugs), Timeout(timeout),
74 run_find_bugs(find_bugs), Timeout(timeout),
75 MemoryLimit(memlimit), UseValgrind(use_valgrind) {}
76
77BugDriver::~BugDriver() {
78 delete Program;
79}
80
81
82/// ParseInputFile - Given a bitcode or assembly input filename, parse and

--- 9 unchanged lines hidden (view full) ---

92 // If we don't have an override triple, use the first one to configure
93 // bugpoint, or use the host triple if none provided.
94 if (Result) {
95 if (TargetTriple.getTriple().empty()) {
96 Triple TheTriple(Result->getTargetTriple());
97
98 if (TheTriple.getTriple().empty())
99 TheTriple.setTriple(sys::getHostTriple());
75 MemoryLimit(memlimit), UseValgrind(use_valgrind) {}
76
77BugDriver::~BugDriver() {
78 delete Program;
79}
80
81
82/// ParseInputFile - Given a bitcode or assembly input filename, parse and

--- 9 unchanged lines hidden (view full) ---

92 // If we don't have an override triple, use the first one to configure
93 // bugpoint, or use the host triple if none provided.
94 if (Result) {
95 if (TargetTriple.getTriple().empty()) {
96 Triple TheTriple(Result->getTargetTriple());
97
98 if (TheTriple.getTriple().empty())
99 TheTriple.setTriple(sys::getHostTriple());
100
100
101 TargetTriple.setTriple(TheTriple.getTriple());
102 }
103
104 Result->setTargetTriple(TargetTriple.getTriple()); // override the triple
105 }
106 return Result;
107}
108

--- 4 unchanged lines hidden (view full) ---

113//
114bool BugDriver::addSources(const std::vector<std::string> &Filenames) {
115 assert(Program == 0 && "Cannot call addSources multiple times!");
116 assert(!Filenames.empty() && "Must specify at least on input filename!");
117
118 // Load the first input file.
119 Program = ParseInputFile(Filenames[0], Context);
120 if (Program == 0) return true;
101 TargetTriple.setTriple(TheTriple.getTriple());
102 }
103
104 Result->setTargetTriple(TargetTriple.getTriple()); // override the triple
105 }
106 return Result;
107}
108

--- 4 unchanged lines hidden (view full) ---

113//
114bool BugDriver::addSources(const std::vector<std::string> &Filenames) {
115 assert(Program == 0 && "Cannot call addSources multiple times!");
116 assert(!Filenames.empty() && "Must specify at least on input filename!");
117
118 // Load the first input file.
119 Program = ParseInputFile(Filenames[0], Context);
120 if (Program == 0) return true;
121
121
122 outs() << "Read input file : '" << Filenames[0] << "'\n";
123
124 for (unsigned i = 1, e = Filenames.size(); i != e; ++i) {
125 std::auto_ptr<Module> M(ParseInputFile(Filenames[i], Context));
126 if (M.get() == 0) return true;
127
128 outs() << "Linking in input file: '" << Filenames[i] << "'\n";
129 std::string ErrorMessage;

--- 17 unchanged lines hidden (view full) ---

147///
148bool BugDriver::run(std::string &ErrMsg) {
149 if (run_find_bugs) {
150 // Rearrange the passes and apply them to the program. Repeat this process
151 // until the user kills the program or we find a bug.
152 return runManyPasses(PassesToRun, ErrMsg);
153 }
154
122 outs() << "Read input file : '" << Filenames[0] << "'\n";
123
124 for (unsigned i = 1, e = Filenames.size(); i != e; ++i) {
125 std::auto_ptr<Module> M(ParseInputFile(Filenames[i], Context));
126 if (M.get() == 0) return true;
127
128 outs() << "Linking in input file: '" << Filenames[i] << "'\n";
129 std::string ErrorMessage;

--- 17 unchanged lines hidden (view full) ---

147///
148bool BugDriver::run(std::string &ErrMsg) {
149 if (run_find_bugs) {
150 // Rearrange the passes and apply them to the program. Repeat this process
151 // until the user kills the program or we find a bug.
152 return runManyPasses(PassesToRun, ErrMsg);
153 }
154
155 // If we're not running as a child, the first thing that we must do is
156 // determine what the problem is. Does the optimization series crash the
157 // compiler, or does it produce illegal code? We make the top-level
158 // decision by trying to run all of the passes on the the input program,
159 // which should generate a bitcode file. If it does generate a bitcode
160 // file, then we know the compiler didn't crash, so try to diagnose a
155 // If we're not running as a child, the first thing that we must do is
156 // determine what the problem is. Does the optimization series crash the
157 // compiler, or does it produce illegal code? We make the top-level
158 // decision by trying to run all of the passes on the the input program,
159 // which should generate a bitcode file. If it does generate a bitcode
160 // file, then we know the compiler didn't crash, so try to diagnose a
161 // miscompilation.
162 if (!PassesToRun.empty()) {
163 outs() << "Running selected passes on program to test for crash: ";
164 if (runPasses(Program, PassesToRun))
165 return debugOptimizerCrash();
166 }
167
168 // Set up the execution environment, selecting a method to run LLVM bitcode.

--- 20 unchanged lines hidden (view full) ---

189 return debugCodeGeneratorCrash(ErrMsg);
190 }
191 CreatedOutput = true;
192 }
193
194 // Make sure the reference output file gets deleted on exit from this
195 // function, if appropriate.
196 sys::Path ROF(ReferenceOutputFile);
161 // miscompilation.
162 if (!PassesToRun.empty()) {
163 outs() << "Running selected passes on program to test for crash: ";
164 if (runPasses(Program, PassesToRun))
165 return debugOptimizerCrash();
166 }
167
168 // Set up the execution environment, selecting a method to run LLVM bitcode.

--- 20 unchanged lines hidden (view full) ---

189 return debugCodeGeneratorCrash(ErrMsg);
190 }
191 CreatedOutput = true;
192 }
193
194 // Make sure the reference output file gets deleted on exit from this
195 // function, if appropriate.
196 sys::Path ROF(ReferenceOutputFile);
197 FileRemover RemoverInstance(ROF, CreatedOutput && !SaveTemps);
197 FileRemover RemoverInstance(ROF.str(), CreatedOutput && !SaveTemps);
198
199 // Diff the output of the raw program against the reference output. If it
198
199 // Diff the output of the raw program against the reference output. If it
200 // matches, then we assume there is a miscompilation bug and try to
200 // matches, then we assume there is a miscompilation bug and try to
201 // diagnose it.
202 outs() << "*** Checking the code generator...\n";
203 bool Diff = diffProgram(Program, "", "", false, &Error);
204 if (!Error.empty()) {
205 errs() << Error;
206 return debugCodeGeneratorCrash(ErrMsg);
207 }
208 if (!Diff) {

--- 38 unchanged lines hidden ---
201 // diagnose it.
202 outs() << "*** Checking the code generator...\n";
203 bool Diff = diffProgram(Program, "", "", false, &Error);
204 if (!Error.empty()) {
205 errs() << Error;
206 return debugCodeGeneratorCrash(ErrMsg);
207 }
208 if (!Diff) {

--- 38 unchanged lines hidden ---