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 --- |