Support remote execute for ARM.
authorDavid Goodwin <david_goodwin@apple.com>
Fri, 10 Jul 2009 21:39:28 +0000 (21:39 +0000)
committerDavid Goodwin <david_goodwin@apple.com>
Fri, 10 Jul 2009 21:39:28 +0000 (21:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75292 91177308-0d34-0410-b5e6-96231b3b80d8

tools/bugpoint/BugDriver.cpp
tools/bugpoint/ExecutionDriver.cpp
tools/bugpoint/Miscompilation.cpp
tools/bugpoint/ToolRunner.cpp

index aab50720c6efe587e2ce134cb0d84e40ffdd52c8..269bf5fb095f6d80381c782a7270be1c71e80f92 100644 (file)
@@ -205,7 +205,7 @@ bool BugDriver::run() {
   std::cout << "*** Checking the code generator...\n";
   try {
     if (!diffProgram()) {
-      std::cout << "\n*** Debugging miscompilation!\n";
+      std::cout << "\n*** Output matches: Debugging miscompilation!\n";
       return debugMiscompilation();
     }
   } catch (ToolExecutionError &TEE) {
index 640fe2829aeb2d8a83a0f7234ba03e44dc6ff3f0..854aeb817f92b17ef3c5d07c81774d4f5301aed0 100644 (file)
@@ -457,9 +457,10 @@ bool BugDriver::diffProgram(const std::string &BitcodeFile,
     }
     FilesDifferent = true;
   }
-
-  // Remove the generated output.
-  Output.eraseFromDisk();
+  else {
+    // Remove the generated output if there are no differences.
+    Output.eraseFromDisk();
+  }
 
   // Remove the bitcode file if we are supposed to.
   if (RemoveBitcode)
index 21e141243b37bfe4f80f0ca38c6ca5bb81ee3662..785abb9240529e200e0ff47a1441c62567e5404f 100644 (file)
@@ -57,7 +57,7 @@ ReduceMiscompilingPasses::doTest(std::vector<const PassInfo*> &Prefix,
   // First, run the program with just the Suffix passes.  If it is still broken
   // with JUST the kept passes, discard the prefix passes.
   std::cout << "Checking to see if '" << getPassesString(Suffix)
-            << "' compile correctly: ";
+            << "' compiles correctly: ";
 
   std::string BitcodeResult;
   if (BD.runPasses(Suffix, BitcodeResult, false/*delete*/, true/*quiet*/)) {
@@ -85,7 +85,7 @@ ReduceMiscompilingPasses::doTest(std::vector<const PassInfo*> &Prefix,
   // Next, see if the program is broken if we run the "prefix" passes first,
   // then separately run the "kept" passes.
   std::cout << "Checking to see if '" << getPassesString(Prefix)
-            << "' compile correctly: ";
+            << "' compiles correctly: ";
 
   // If it is not broken with the kept passes, it's possible that the prefix
   // passes must be run before the kept passes to break it.  If the program
index 978e60bed38a46516f3c7e53e0df65df337ae2c4..7087cdd3d1ca2e932e7da97acab7b78b59c83a86 100644 (file)
@@ -32,6 +32,10 @@ namespace {
   RemoteHost("remote-host",
              cl::desc("Remote execution (rsh/ssh) host"));
 
+  cl::opt<std::string>
+  RemotePort("remote-port",
+             cl::desc("Remote execution (rsh/ssh) port"));
+
   cl::opt<std::string>
   RemoteUser("remote-user",
              cl::desc("Remote execution (rsh/ssh) user id"));
@@ -538,6 +542,23 @@ CBE *AbstractInterpreter::createCBE(const std::string &ProgramPath,
 //===---------------------------------------------------------------------===//
 // GCC abstraction
 //
+
+static bool
+IsARMArchitecture(std::vector<std::string> Args)
+{
+  for (std::vector<std::string>::const_iterator
+         I = Args.begin(), E = Args.end(); I != E; ++I) {
+    if (!strcasecmp(I->c_str(), "-arch")) {
+      ++I;
+      if ((I != E) && !strncasecmp(I->c_str(), "arm", strlen("arm"))) {
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
 int GCC::ExecuteProgram(const std::string &ProgramFile,
                         const std::vector<std::string> &Args,
                         FileType fileType,
@@ -562,7 +583,11 @@ int GCC::ExecuteProgram(const std::string &ProgramFile,
   } else {
     GCCArgs.push_back("assembler");
 #ifdef __APPLE__
-    GCCArgs.push_back("-force_cpusubtype_ALL");
+    // For ARM architectures we don't want this flag. bugpoint isn't
+    // explicitly told what architecture it is working on, so we get
+    // it from gcc flags
+    if (!IsARMArchitecture(ArgsForGCC))
+      GCCArgs.push_back("-force_cpusubtype_ALL");
 #endif
   }
   GCCArgs.push_back(ProgramFile.c_str());  // Specify the input filename...
@@ -615,6 +640,10 @@ int GCC::ExecuteProgram(const std::string &ProgramFile,
     ProgramArgs.push_back(RemoteHost.c_str());
     ProgramArgs.push_back("-l");
     ProgramArgs.push_back(RemoteUser.c_str());
+    if (!RemotePort.empty()) {
+      ProgramArgs.push_back("-p");
+      ProgramArgs.push_back(RemotePort.c_str());
+    }
     if (!RemoteExtra.empty()) {
       ProgramArgs.push_back(RemoteExtra.c_str());
     }